我在寫一個生產者/消費者程序。我有三位消費者從隊列中讀取,一位生產者在隊列中寫入。 當生產者在隊列中寫入內容時,它使用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