死鎖:通常狀況下,若是同一個線程前後兩次調用lock,在第二次調用時,因爲鎖已經被佔用,該線程 會掛起等待別的線程釋放鎖,然而鎖正是被本身佔用着的,該線程又被掛起而沒有機會釋放鎖, 所以 就永遠處於掛起等待狀態了,這叫作死鎖(Deadlock)。ide
另外一種典型的死鎖情形是這樣:線 程A獲 得了鎖1,線程B得到了鎖2,這時線程A調用lock試圖得到鎖2,結果是須要掛起等待線程 B釋放 鎖2,而這時線程B也調用lock試圖得到鎖1,結果是須要掛起等待線程A釋放鎖1,因而線 程A和B都 永遠處於掛起狀態了。spa
死鎖產生的四個必要條件線程
(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