linux中的死鎖

    死鎖:通常狀況下,若是同一個線程前後兩次調用lock,在第二次調用時,因爲鎖已經被佔用,該線程 會掛起等待別的線程釋放鎖,然而鎖正是被本身佔用着的,該線程又被掛起而沒有機會釋放鎖, 所以 就永遠處於掛起等待狀態了,這叫作死鎖(Deadlock)。ide

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

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

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

2.常見產生死鎖的緣由隊列

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

3.規避死鎖的方法ci

 (1)忽略該問題。資源

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

相關文章
相關標籤/搜索