首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cond_broadcast和调度顺序

cond_broadcast和调度顺序
EN

Stack Overflow用户
提问于 2013-03-26 21:14:16
回答 2查看 132关注 0票数 1

我正在写一个生产者/消费者程序。我有3个消费者从队列中读取数据,一个生产者在队列中写入数据。当生产者在队列中编写内容时,它会使用phtread_cond_broadcast进行广播。然后消费者醒来了,但我在我的程序中找到了一个模式。其中一个消费者总是比其他消费者先醒来,然后清空队列。我的问题是,广播每次以相同的顺序唤醒所有线程是正常的吗?

制片人:

代码语言:javascript
复制
pthread_mutex_lock(&mutex1);
if(/* write something */)
phtread_cond_broadcast(&cond1)
pthread_mutex_unlock(&mutex1);

消费者:

代码语言:javascript
复制
pthread_mutex_lock(&mutex1);
while(/* queue vide */)
phtread_cond_wait(&cond1);
pthread_mutex_unlock(&mutex1);
EN

回答 2

Stack Overflow用户

发布于 2013-03-26 21:29:02

如果在生产者编写代码时,只有一个消费者可能有工作要做,那么您应该考虑使用pthread_cond_signal()。这样你就只会醒来一次(注:根据文档,它可能不止一个),而不是所有的消费者。唤醒他们所有人都会导致“雷鸣般的羊群”现象,每个人都会争先恐后地抢夺相同的工作项目,然后他们中的大多数人什么也没做就又睡着了。

票数 0
EN

Stack Overflow用户

发布于 2013-03-26 22:53:22

根据手册页If more than one thread is blocked on a condition variable, the scheduling policy determines the order in which threads are unblocked.

因此,听起来好像如果一堆因素(调度策略、库版本等)是相同的,那么顺序也是相同的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15637973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档