linux中的死鎖

    死鎖:一般情況下,如果同一個線程先後兩次調用lock,在第二次調用時,由於鎖已經被佔用,該線程 會掛起等待別的線程釋放鎖,然而鎖正是被自己佔用着的,該線程又被掛起而沒有機會釋放鎖, 因此 就永遠處於掛起等待狀態了,這叫做死鎖(Deadlock)。

    另一種典型的死鎖情形是這樣:線 程A獲 得了鎖1,線程B獲得了鎖2,這時線程A調用lock試圖獲得鎖2,結果是需要掛起等待線程 B釋放 鎖2,而這時線程B也調用lock試圖獲得鎖1,結果是需要掛起等待線程A釋放鎖1,於是線 程A和B都 永遠處於掛起狀態了。

  1. 死鎖產生的四個必要條件

    (1)互斥使用(資源獨佔) 
    一個資源每次只能給一個進程使用 。
    (2)不可強佔(不可剝奪) 
    資源申請者不能強行的從資源佔有者手中奪取資源,資源只能由佔有者自願釋放 。
    (3)請求和保持(部分分配,佔有申請) 
    一個進程在申請新的資源的同時保持對原有資源的佔有(只有這樣纔是動態申請,動態分配)。 
    (4)循環等待 
    存在一個進程等待隊列 {P1 , P2 , … , Pn}, 其中P1等待P2佔有的資源,P2等待P3佔有的資源,…,Pn等待P1佔有的資源,形成一個進程等待環路。

2.常見產生死鎖的原因

     (1) 因爲系統資源不足。
   (2) 進程運行推進的順序不合適。
   (3) 資源分配不當。

3.規避死鎖的方法

 (1)忽略該問題。

 (2)檢測死鎖並且恢復。
 (3)仔細地對資源進行動態分配,以避免死鎖。
 (4)通過破除死鎖四個必要條件之一,來防止死鎖產生。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章