2016-04-30 34 views
4

我需要同步多個線程(使用POSIX線程)。而且,我正在使用條件變量(監視器)來實現這一點。使用條件變量(監視器)同步線程

問題是我必須實施「先到先得」策略。假設多個線程正在等待另一個線程發信號通知狀態改變,pthread_cond_wait調用是否將線程本身放入隊列中,還是應該定義一個顯式隊列來實現這一點?對此可能的解決方案也可能是使用鎖。

+0

什麼是*「先來先服務」戰略*關於?線程或這些數據產生的?如果是關於線程 - 重新考慮你的設計(除非證明你知道你在做什麼是一項大學任務)。如果是關於數據 - 只需將數據放入隊列並處理隊列即可。 – ArturFH

回答

0

Pthreads API不保證pthread_cond_wait + pthread_cond_signal/pthread_cond_broadcast組合的公平性。該spec明確指出調度策略將確定在等待的線程將被喚醒的順序:

如果不止一個線程被阻塞在一個條件變量,調度策略應確定在哪個線程是爲了暢通。

如果你不想依靠調度程序(即使它是一個has "aged well" like Linux' CFS),你需要控制停車和自己停車。

至於公平的等待隊列的實現,你可以建立上MCS queue的頂部。