1

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

制片人:

pthread_mutex_lock(&mutex1);
if(/* write something */)
phtread_cond_broadcast(&cond1)
pthread_mutex_unlock(&mutex1);

消费者 :

pthread_mutex_lock(&mutex1);
while(/* queue vide */)
phtread_cond_wait(&cond1);
pthread_mutex_unlock(&mutex1);
4

2 回答 2

0

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

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

于 2013-03-26T14:53:22.060 回答
0

如果生产者写东西时只有一个消费者可能有工作要做,你应该考虑pthread_cond_signal()改用。这样你只会唤醒一个(根据文档,它可能不止一个),而不是所有的消费者。把他们全部叫醒会导致“雷声从众”现象,每个人都争先恐后地抢同样的工作项目,然后他们中的大多数人什么也没做就又睡着了。

于 2013-03-26T13:29:02.207 回答