我在写一个生产者/消费者程序。我有三位消费者从队列中读取,一位生产者在队列中写入。 当生产者在队列中写入内容时,它使用phtread_cond_broadcast广播它。然后消费者醒来,但我在我的程序中找到了一个模式。消费者之一总是在其他人面前醒来,然后清理队列。我的问题是广播每次都以相同的顺序唤醒所有线程是正常的吗?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_wait可能应该有一个条件参数... – themel 2013-03-26 14:23:07