2013-03-05 46 views
5

我定義相互排斥和分別如下死鎖,:如果在每一個時刻,每個共享資源要麼分配給一個進程,或可用存在 互斥狀態。 如果集合中的每個進程正在等待只有集合中的另一個進程可能導致的事件,則會導致一組進程死鎖。如果保證互斥,用信號量說,是一個程序無死鎖?

說,二進制信號的使用,確保只有一個能在同一時間進入臨界區域。由於每個進程在進入其臨界區域之前都會發生一次倒退,並且在離開之後會立即停止,因此可以保證相互排斥。

我知道有四個條件必須適用於發生死鎖,其中之一是互斥條件(兩個進程可能不會同時在其關鍵部分內)。

由於相互排斥是保證,是程序,在這種情況下,無死鎖?

問候。

回答

6

不一定。想象一下,這兩個線程:

Thread 1   Thread 2 
============  ============= 
Acquire A   Acquire B 
Acquire B   Acquire A 
Release B   Release A 
Release A   Release B 

在這裏,相互排斥確實保證 - 在每一個瞬間,信號A和B或者由一個線程或系統範圍內可用資 - 但僵局仍然是可能的,如果線程1和2每個獲得它們的第一個鎖(線程1的B,線程2的B),但是會等待另一個持有的資源死鎖。

希望這會有所幫助!