死鎖產生的條件以及解決方法

2022-02-08 17:49:31 字數 1537 閱讀 8150

本文主要講為什麼會產生死鎖?如何避免以及發生死鎖該如何恢復死鎖?

產生死鎖的四個必要條件:

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

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

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

(4) 環路等待條件:若干程序之間形成一種頭尾相接的迴圈等待資源關係。

只要系統發生了死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死

鎖。1.預防死鎖

預防死鎖的發生只需破壞死鎖產生的四個必要條件之一即可。

1) 破壞互斥條件

如果允許系統資源都能共享使用,則系統不會進入死鎖狀態。但有些資源根本不能同時

訪問,如印表機等臨界資源只能互斥使用。所以,破壞互斥條件而預防死鎖的方法不太可

行,而且在有的場合應該保護這種互斥性。

2) 破壞不剝奪條件

當乙個已保持了某些不可剝奪資源的程序,請求新的資源而得不到滿足時,它必須釋放

已經保持的所有資源,待以後需要時再重新申請。這意味著,乙個程序已占有的資源會被

暫時釋放,或者說是被剝奪了,或從而破壞了不可剝奪條件。

該策略實現起來比較複雜,釋放已獲得的資源可能造成前一階段工作的失效,反覆地

申請和釋放資源會增加系統開銷,降低系統吞吐量。這種方法常用於狀態易於儲存和恢復

的資源,如cpu 的暫存器及記憶體資源,一般不能用於印表機之類的資源。

3) 破壞請求和保持條件

釆用預先靜態分配方法,即程序在執行前一次申請完它所需要的全部資源,在它的資

源未滿足前,不把它投入執行。一旦投入執行後,這些資源就一直歸它所有,也不再提出

其他資源請求,這樣就可以保證系統不會發生死鎖。

這種方式實現簡單,但缺點也顯而易見,系統資源被嚴重浪費,其中有些資源可能僅

在執行初期或執行快結束時才使用,甚至根本不使用。而且還會導致「飢餓」現象,當由

於個別資源長期被其他程序占用時,將致使等待該資源的程序遲遲不能開始執行。

4) 破壞環路等待條件

為了破壞迴圈等待條件,可釆用順序資源分配法。首先給系統中的資源編號,規定每

程序,必須按編號遞增的順序請求資源,同類資源一次申請完。也就是說,只要程序提

出申請分配資源ri,則該程序在以後的資源申請中,只能申請編號大於ri 的資源。

這種方法存在的問題是,編號必須相對穩定,這就限制了新型別裝置的增加;儘管在

為資源編號時已考慮到大多數作業實際使用這些資源的順序,但也經常會發生作業使甩資

源的順序與系統規定順序不同的情況,造成資源的浪費;此外,這種按規定次序申請資源

的方法,也必然會給使用者的程式設計帶來麻煩。

2.避免死鎖

銀行家演算法。

3.檢測死鎖

死鎖定理。

4.解除死鎖

4.1 從死鎖程序處剝奪資源

4.2 終止部分或全部程序

死鎖的產生條件及解決方法

產生死鎖的原因主要是 1 因為系統資源不足。2 程序執行推進的順序不合適。3 資源分配不當等。如果系統資源充足,程序的資源請求都能夠得到滿足,死鎖出現的可能性就很低,否則 就會因爭奪有限的資源而陷入死鎖。其次,程序執行推進順序與速度不同,也可能產生死鎖。產生死鎖的四個必要條件 1 互斥條件 乙個資源...

產生死鎖的必要條件和解決方法

死鎖 多個程序為了競爭資源而造成的僵局,如果沒有外力作用,這些程序將再也不能向前推進。產生死鎖的原因 1.競爭系統資源 2.程序的推進順序不當 產生死鎖的必要條件 互斥條件 進行要求對其分配的資源進行排他控制,即在一段時間內某資源只能為這乙個程序享有。請求和保持條件 當程序因請求資源而阻塞時,對已經...

死鎖產生原因及解決方法

死鎖 執行緒級 死鎖是指兩個或兩個以上的執行緒在執行過程中,由於競爭資源而造成的一種阻塞的現象 產生的4個條件 1 互斥使用 即乙個執行緒在使用時,另外執行緒不可使用 2 不可搶占資源 資源請求者不能強制從資源佔有者手中奪取資源 3 占有且等待 當前執行緒在請求其他資源時,保持對原有資源占有 4 迴...