我正在尝试了解pthread_cond_broadcast
方法的实际用例。
到目前为止,我已经找到了两个答案:
#1很有意义,但是,#2令人困惑。我发现以下代码演示了这种情况。我的问题是,由于唤醒条件变量时,它将获取互斥量,其他线程必须再次进入睡眠状态。那么,唤醒所有人的目的是什么? pthread是否一直保持信号,直到所有线程都有机会至少获取一次互斥锁?在我看来,没有意义,因为只有其中一个可以获取互斥体。
我必须遗漏一点,希望有人可以向我解释。
非常感谢您!
参考:https://docs.oracle.com/cd/E19455-01/806-5257/sync-27/index.html
pthread_mutex_t rsrc_lock;
pthread_cond_t rsrc_add;
unsigned int resources;
get_resources(int amount)
{
pthread_mutex_lock(&rsrc_lock);
while (resources < amount) {
pthread_cond_wait(&rsrc_add, &rsrc_lock);
}
resources -= amount;
pthread_mutex_unlock(&rsrc_lock);
}
add_resources(int amount)
{
pthread_mutex_lock(&rsrc_lock);
resources += amount;
pthread_cond_broadcast(&rsrc_add);
pthread_mutex_unlock(&rsrc_lock);
}