2014-05-12 36 views
0

我感到困惑操作系統的同步部分之間的差異。我不明白互斥問題用在監控信號燈。它們有什麼不同?是什麼互斥監控和信號燈

顯然;在Monitor和Semaphore上使用Mutual Exclusion有什麼不同?或者在監視器和信號量中使用相互排斥的規則,是否也適用相同的規則?

附加註釋=這句話被搞糊塗了。 「信號燈和監控器都設計爲一個或多個CPU,這些CPU都可以訪問到一個共同的存儲解決互斥問題」

而且我讀這些文章= Monitor - Mutual Exclusion

Mutex vs Semaphore

+1

線程同步的術語不是通用的。即使您鏈接的維基百科文章至少以兩種不同的方式定義了監視器。你有一個特定的實現或操作系統,你問的或只是一個普遍的問題? – b4hand

+0

信號量是一個通用術語。互斥是一種特定類型的信號量,具有幾個不同的特徵:1.它可以被鎖定它的線程釋放**。 2.它能夠檢測優先級繼承的死鎖並使用優先級反轉來解決它們。當低優先級線程和高優先級線程共享公共資源時,可能會發生這些死鎖。在某個時間點,低優先級線程正在運行。然後它被搶佔,以支持(非相關的)中等優先級的線程,使高優先級的線程「被鎖定」。 –

+0

@ b4hand我問了互斥的具體實現和實現規則,如果存在 – TeachMeJava

回答

2

互斥對使用共享內存的多個並行進程的行爲的要求。讓你感到困惑的句子是指:共同記憶=共享記憶。

互斥要求中規定至多一個方法可以是在任何給定時間其臨界區(臨界區是使用駐留在共享存儲器中的特定資源的一段程序代碼)。這個要求並沒有說明如何實現,而只是要實現什麼。

信號燈和顯示器在其相互排斥,可以強制執行設備,所以他們回答「如何做」的問題。兩者都必須根據自己的規則來使用,但兩者都可以強制相互排斥。

希望這會有所幫助。

+0

謝謝,現在我對這個問題非常清楚。 upvote並接受。 – TeachMeJava

0

這裏是你應該考慮相互排斥的。

相互排斥是仲裁關鍵部分(不同線程之間的共享代碼)的訪問,以便在任何時候只允許一個線程執行關鍵部分。可以通過多種方式確保互斥信號量,互斥量和監視器的使用。它使用哪種機制來確保互斥是否是信號量或montior,唯一的區別是信號量和monitor.semaphore是通過os提供的(儘管您可以創建你自己的)和監視器是編程語言構造提供互斥。