1. 程式人生 > >C-pthread_cond_wait 詳解

C-pthread_cond_wait 詳解

read thread 一個 同時 多個 wait 產生 adc 全部

pthread_cond_wait() 用於阻塞當前線程,等待別的線程使用 pthread_cond_signal() 或 pthread_cond_broadcast 來喚醒它。

pthread_cond_wait() 必須與 pthread_mutex 配套使用。

pthread_cond_wait()函數一進入wait狀態就會自動 release mutex。當其他線程通過 pthread_cond_signal()或 pthread_cond_broadcast,把該線程喚醒,使 pthread_cond_wait() 通過(返回)時,該線程又自動獲得該 mutex。

pthread_cond_signal() 函數的作用是發送一個信號給另外一個正在處於阻塞等待狀態的線程,使其脫離阻塞狀態,繼續執行.如果沒有線程處在阻塞等待狀態,pthread_cond_signal也會成功返回。

使用 pthread_cond_signal 一般不會有“驚群現象”產生,他最多只給一個線程發信號。假如有多個線程正在阻塞等待著這個條件變量的話,那麽是根據各等待線程優先級的高低確定哪個線程接收到信號開始繼續執行。如果各線程優先級相同,則根據等待時間的長短來確定哪個線程獲得信號。但無論如何一個 pthread_cond_signal 調用最多發信一次。

但是 pthread_cond_signal 在多處理器上可能同時喚醒多個線程,當你只能讓一個線程處理某個任務時,其它被喚醒的線程就需要繼續 wait,而且規範要求 pthread_cond_signal 至少喚醒一個 pthread_cond_wait 上的線程,其實有些實現為了簡單在單處理器上也會喚醒多個線程.

另外,某些應用,如線程池,pthread_cond_broadcast 喚醒全部線程,但我們通常只需要一部分線程去做執行任務,所以其它的線程需要繼續 wait.所以強烈推薦對 pthread_cond_wait() 使用 while 循環來做條件判斷。

摘自:http://www.xuebuyuan.com/2173853.html

C-pthread_cond_wait 詳解