2013-06-01 41 views
1

我發現在這個問題上非常相似,但是並沒有完全回答我的問題。 java.util.concurrent.Sempaphore;帶重載構造函數,它也採用公平性(boolean)參數,保證等待獲取線程的FIFO? 在此先感謝。用信號量保證FIFO?

回答

2

它構建了一個等待線程隊列來獲取信號量。這使得它比較慢,但是將按照線程添加到隊列的順序給出許可證。

注意:由於可能出現在多個線程中的爭用情況,您不能說嘗試獲取信號量的線程會先被添加到隊列中,例如,如果它在嘗試獲取信號量和被添加到隊列之間暫停。

+0

「注意:由於可能發生在多個線程中的競態條件,您不能說嘗試獲取信號量的線程將首先添加到隊列中,例如,如果它在嘗試獲取信號量和被添加之間暫停到隊列。「因此,正確地同步捕獲呼叫應該保證FIFO算法? – Rollerball

+0

我相信使用synchronized會混淆問題。你不應該編寫需要保證公平的程序,而只需盡最大的努力。如果你想確保某些操作只以特定的順序進行,你應該使用一個線程(即使這樣,代碼也可以重新排序;) –