gpt4 book ai didi

c++ - cond_broadcast 和调度顺序

转载 作者:太空宇宙 更新时间:2023-11-04 14:09:04 25 4
gpt4 key购买 nike

我正在编写生产者/消费者程序。我有 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);

最佳答案

如果当生产者写东西时只有一个消费者可能有工作要做,您应该考虑改用 pthread_cond_signal()。这样你就只会唤醒一个(注意,根据文档,它可能不止一个),而不是所有的消费者。将他们全部唤醒会导致“雷鸣般的群体”现象,即每个人都争先恐后地抢夺同一个工作项目,然后他们中的大多数人什么也没做就回去 sleep 了。

关于c++ - cond_broadcast 和调度顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15637973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com