說我有三個線程需要訪問一個集合,我在每個線程的訪問周圍使用一個鎖定塊。出現以下情況...鎖定陳述C#
(1)線索1沾到集合鎖
(2)線程2被阻斷
(3)線3堵塞
當線程1釋放鎖,誰會接下來的鎖?它是否是FIFO訪問?
謝謝
說我有三個線程需要訪問一個集合,我在每個線程的訪問周圍使用一個鎖定塊。出現以下情況...鎖定陳述C#
(1)線索1沾到集合鎖
(2)線程2被阻斷
(3)線3堵塞
當線程1釋放鎖,誰會接下來的鎖?它是否是FIFO訪問?
謝謝
你不應該在乎誰下一個鎖。
假設它像Win32那麼答案是它可能是FIFO,但它可能不是(它是別的東西)。例如,優先級較高的線程應該是第一個;但線程可以暫時提升或降低他們的優先級,這取決於他們最近在做什麼。
你的問題意味着你正在尋找一個先進先出的行爲?然後,你可能想通過的Jakub Sloup嘗試這種代碼:
Monitor/lock which remember order in C# to simulate FIFO
正如已經在其他的答案中提到,沒有保證的順序等待的線程將獲得鎖。
作爲您的問題的答案,所有主題都會收到monitor.pulse,然後將爭奪下一個獲得鎖定的人。
我相信wintellect的人寫了一篇關於這種行爲如何導致不公平的博客的博客,但是在監視器中根本沒有公平性。
答案是根據定義,不確定。
你可以擴展說你*不能*關心。也許。 – JMD 2009-02-18 20:39:00
我意識到我應該編程這些線程,以便我不在乎,我只是想知道這個機制是什麼。 – 2009-02-18 20:44:26
http://msdn.microsoft.com/en-us/library/aa645740(VS.71).aspx#vcwlkthreadingtutorialexample4mutex 「運行樣本的機器的速度和操作系統會影響輸出順序。」 – 2009-02-18 20:57:31