2011-04-06 39 views

回答

7

pthread_cond_broadcast()應當多個線程可以基於條件變量等待被使用,但其中的一些線程可能不準備進行。 pthread_cond_signal()可能會喚醒其中一個線程; pthread_cond_broadcast()將它們全部喚醒,以便如果有任何可以繼續,將會有。

例如,我們可能有一個互斥鎖來保護兩個變量xy。某些線程等待這個條件:

pthread_mutex_lock(&mutex); 
while (x < 10) 
    pthread_cond_wait(&cond, &mutex); 

而其他在此條件下等待:

pthread_mutex_lock(&mutex); 
while (x < 10 || y < 5) 
    pthread_cond_wait(&cond, &mutex); 

如果一個線程增加x高於10,但留下小於5 y,那麼它應該使用pthread_cond_broadcast(&cond),因爲任何線程都在等待第二個條件都還沒有準備好運行,所以我們必須保證從第一個條件中的至少一個線程被喚醒(如果有任何等待這個條件)。

有一點要記住正確的代碼是pthread_cond_signal()是一種優化,僅此而已 - 如果你的代碼是正確的,那麼也應該如果每個pthread_cond_signal()pthread_cond_broadcast()(但可能無法有效)更換工作。

+0

感謝您的時間咖啡館..... – user1754940 2011-04-08 11:34:06

相關問題