如何解决pthread_cond_broadcast背后的原理是什么?
我正在尝试了解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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。