2009-02-18 94 views
6

說我有三個線程需要訪問一個集合,我在每個線程的訪問周圍使用一個鎖定塊。出現以下情況...鎖定陳述C#

(1)線索1沾到集合鎖
(2)線程2被阻斷
(3)線3堵塞

當線程1釋放鎖,誰會接下來的鎖?它是否是FIFO訪問?

謝謝

回答

17

你不應該在乎誰下一個鎖。

+2

你可以擴展說你*不能*關心。也許。 – JMD 2009-02-18 20:39:00

+0

我意識到我應該編程這些線程,以便我不在乎,我只是想知道這個機制是什麼。 – 2009-02-18 20:44:26

+2

http://msdn.microsoft.com/en-us/library/aa645740(VS.71).aspx#vcwlkthreadingtutorialexample4mutex 「運行樣本的機器的速度和操作系統會影響輸出順序。」 – 2009-02-18 20:57:31

4

假設它像Win32那麼答案是它可能是FIFO,但它可能不是(它是別的東西)。例如,優先級較高的線程應該是第一個;但線程可以暫時提升或降低他們的優先級,這取決於他們最近在做什麼。

5

你的問題意味着你正在尋找一個先進先出的行爲?然後,你可能想通過的Jakub Sloup嘗試這種代碼:

Monitor/lock which remember order in C# to simulate FIFO

正如已經在其他的答案中提到,沒有保證的順序等待的線程將獲得鎖。

4

作爲您的問題的答案,所有主題都會收到monitor.pulse,然後將爭奪下一個獲得鎖定的人。

我相信wintellect的人寫了一篇關於這種行爲如何導致不公平的博客的博客,但是在監視器中根本沒有公平性。

3

答案是根據定義,不確定。