死鎖,產生原因,避免

2021-09-12 09:11:32 字數 1917 閱讀 9233

什麼是死鎖

死鎖是指多個程序因競爭資源而造成的一種僵局(互相等待),若無外力作用,這些程序都將無法向前推進。例如,在某乙個計算機系統中只有一台印表機和一台輸入 裝置,程序p1正占用輸入裝置,同時又提出使用印表機的請求,但此時印表機正被程序p2 所占用,而p2在未釋放印表機之前,又提出請求使用正被p1占用著的輸入裝置。這樣兩個程序相互無休止地等待下去,均無法繼續執行,此時兩個程序陷入死鎖狀態

死鎖產生的原因

系統資源的競爭 系統資源的競爭導致系統資源不足,以及資源分配不當,導致死鎖。

程序執行推進順序不合適 程序在執行過程中,請求和釋放資源的順序不當,會導致死鎖。

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

互斥條件:乙個資源每次只能被乙個程序使用,即在一段時間內某 資源僅為乙個程序所占有。此時若有其他程序請求該資源,則請求程序只能等待。

請求與保持條件:程序已經保持了至少乙個資源,但又提出了新的資源請求,而該資源 已被其他程序占有,此時請求程序被阻塞,但對自己已獲得的資源保持不放。

不可剝奪條件:程序所獲得的資源在未使用完畢之前,不能被其他程序強行奪走,即只能 由獲得該資源的程序自己來釋放(只能是主動釋放)。

迴圈等待條件:若干程序間形成首尾相接迴圈等待資源的關係。指在發生死鎖時,必然存在乙個程序——資源的環形鏈,即程序集合中的p0正在等待乙個p1占用的資源;p1正在等待p2占用的資源,……,pn正在等待已被p0占用的資源。

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

死鎖的避免與預防:

死鎖避免的基本思想:

系統對程序發出每乙個系統能夠滿足的資源申請進行動態檢查,並根據檢查結果決定是否分配資源,如果分配後系統可能發生死鎖,則不予分配,否則予以分配。這是一種保證系統不進入死鎖狀態的動態策略。

理解了死鎖的原因,尤其是產生死鎖的四個必要條件,就可以最大可能地避免、預防和解除死鎖。所以,在系統設計、程序排程等方面注意如何讓這四個必要條件不成立,如何確定資源的合理分配演算法,避免程序永久佔據系統資源。此外,也要防止程序在處於等待狀態的情況下占用資源。因此,對資源的分配要給予合理的規劃。

死鎖避免和死鎖預防的區別:

死鎖預防是設法至少破壞產生死鎖的四個必要條件之一,嚴格的防止死鎖的出現,而死鎖避免則不那麼嚴格的限制產生死鎖的必要條件的存在,因為即使死鎖的必要條件存在,也不一定發生死鎖。死鎖避免是在系統執行過程中注意避免死鎖的最終發生。

預防死鎖。

這是一種較簡單和直觀的事先預防的方法。方法是通過設定某些限制條件,去破壞產生死鎖的四個必要條件中的乙個或者幾個,來預防發生死鎖。預防死鎖是一種較易實現的方法,已被廣泛使用。但是由於所施加的限制條件往往太嚴格,可能會導致系統資源利用率和系統吞吐量降低。

避免死鎖。

該方法同樣是屬於事先預防的策略,但它並不須事先採取各種限制措施去破壞產生死鎖的的四個必要條件,而是在資源的動態分配過程中,用某種方法去防止系統進入不安全狀態,從而避免發生死鎖。

3)檢測死鎖。

這種方法並不須事先採取任何限制性措施,也不必檢查系統是否已經進入不安全區,此方法允許系統在執行過程中發生死鎖。但可通過系統所設定的檢測機構,及時地檢測出死鎖的發生,並精確地確定與死鎖有關的程序和資源,然後採取適當措施,從系統中將已發生的死鎖清除掉。

4)解除死鎖。

這是與檢測死鎖相配套的一種措施。當檢測到系統中已發生死鎖時,須將程序從死鎖狀態中解脫出來。常用的實施方法是撤銷或掛起一些程序,以便**一些資源,再將這些資源分配給已處於阻塞狀態的程序,使之轉為就緒狀態,以繼續執行。死鎖的檢測和解除措施,有可能使系統獲得較好的資源利用率和吞吐量,但在實現上難度也最大。

死鎖產生的原因和避免死鎖的方法

執行緒t1拿到鎖因為一些異常沒有釋放鎖,執行緒t1和t2互相等待對方釋放鎖。public class deadlockdemo private void deadlock catch interruptedexception e synchronized b thread t2 newthread ...

避免死鎖的產生

死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。第乙個建議往往是最簡單的 乙個執行緒已獲得乙個鎖時,再別去獲取第二個。如果能堅持這個建議,因...

死鎖產生的原因

一 什麼是死鎖?如果乙個程序集合裡面的每個程序都在等待這個集合中的其他乙個程序 包括自身 才能繼續往下執行,若無外力他們將無法推進,這種情況就是死鎖,處於死鎖狀態的程序稱為死鎖程序 二 死鎖產生的原因?1.因競爭資源發生死鎖 現象 系統中供多個程序共享的資源的數目不足以滿足全部程序的需要時,就會引起...