2011-03-17 44 views
1

互斥鎖用於保護關鍵部分。假設一個互斥對象已經被執行了,並且在CS中執行它的線程,其他10個線程正好落後於它,並對互斥量進行了降級,從而讓自己進入睡眠狀態。當第一個線程退出臨界區並在互斥體上完成時,是否所有10個線程都會喚醒並恢復它們即將執行的操作,即進入臨界區?那麼這不是說所有10個人都可能同時在關鍵部分結束嗎?當一個線程完成其互斥量時,線程會發生什麼?

回答

1

不,只有一個線程將喚醒並獲取互斥量的所有權。其餘的人將會保持睡眠。哪個線程是醒來的線程通常是不確定的。

以上是泛化,每個系統的實現細節會有所不同。例如,在Java比較Object#notify()Object#notifyAll()

+0

當線程喚醒時,它是否會繼續下一件事,它要在睡覺之前做什麼? – 2011-03-17 22:21:52

+0

接下來要做的事就是獲取互斥鎖。如果互斥鎖可用並且在此期間還沒有被別的東西獲得(這可能發生),那麼是的,它會醒來並繼續它所做的任何事情。 – 2011-03-17 22:24:02

+0

當多個進程在互斥體上停止工作時,其值是否低於0?它的值可以是0或1以外的任何值嗎? – 2011-03-19 05:27:28

相關問題