天天看點

什麼是死鎖和如何解決死鎖

如果一組程序中每一個程序都在等待僅由該組程序中的其他程序才能引發的事件,那麼該組程序是死鎖的。

舉例來說:有兩個程序A和B,A持有資源a等待b資源,B持有資源b等待a資源,兩個程序都在等待另一個資源的同時不釋放資源,就形成死鎖。

形成死鎖的四個必要條件:

(1) 互斥條件:一個資源每次隻能被一個程序使用。

(2) 請求與保持條件:一個程序因請求資源而阻塞時,對已獲得的資源保持不放。

(3) 不剝奪條件:程序已獲得的資源,在末使用完之前,不能強行剝奪。

(4) 循環等待條件:若幹程序之間形成一種頭尾相接的循環等待資源關系。

處理死鎖的思路如下:

預防死鎖:破壞四個必要條件中的一個或多個來預防死鎖

避免死鎖:在資源動态配置設定的過程中,用某種方式防止系統進入不安全的狀态。

檢測死鎖:運作時産生死鎖,及時發現思索,将程式解脫出來。

解除死鎖:發生死鎖後,撤銷程序,回收資源,配置設定給正在阻塞狀态的程序。

破壞請求和保持條件:1.一次性的申請所有資源。之後不在申請資源,如果不滿足資源條件則得不到資源配置設定。2.隻獲得初期資源運作,之後将運作完的資源釋放,請求新的資源。

破壞不可搶占條件:當一個程序獲得某種不可搶占資源,提出新的資源申請,若不能滿足,則釋放所有資源,以後需要,再次重新申請。

破壞循環等待條件:對資源進行排号,按照序号遞增的順序請求資源。若程序獲得序号高的資源想要擷取序号低的資源,就需要先釋放序号高的資源。

1、搶占資源。從一個或多個程序中搶占足夠數量的資源,配置設定給死鎖程序,以解除死鎖狀态。

2、終止(撤銷)程序:将一個或多個思索程序終止(撤銷),直至打破循環環路,使系統從死鎖狀态解脫。

什麼是死鎖和如何解決死鎖

梅花香自古寒來

繼續閱讀