死鎖的產生和預防死鎖

2021-07-15 19:28:38 字數 1425 閱讀 3606

1,死鎖的定義:死鎖是指多個進 程因競爭資源而造成的一種僵局(互相等待),若無外力作用,這些程序都將無法向前推進。

2,死鎖產生的原因主要是:

(1) 因為系統資源不足。

(2) 程序執行推進的順序不合適。

(3) 資源分配不當等。

3,死鎖產生的必要條件:

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

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

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

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

上述條件如果有乙個不滿足,都不會發生死鎖。

4,解決死鎖的辦法:

想要不發生死鎖,只要破壞產生死鎖的必要條件之一,死鎖就不會發生。但是互斥條件不但不能破壞,還要加以保護。

(1)預防死鎖:

資源一次性分配:(破壞

請求和保持條件

可剝奪資源:即當某程序新的資源未滿足時,釋放已占有的資源(破壞不可剝奪條件)

資源有序分配法:系統給每類資源賦予乙個編號,每乙個程序按編號遞增的順序請求資源,釋放則相反(破壞迴圈等待條件)

(2)避免死鎖:

預防死鎖的幾種策略,會嚴重地損害系統效能。因此在避免死鎖時,要施加較弱的限制,從而獲得較滿意的系統效能。由於在避免死鎖的策略中,允許程序動態地申請資源。因而,系統在進行資源分配之前預先計算資源分配的安全性。若此次分配不會導致系統進入不安全狀態

,則將資源分配給程序;否則,程序等待。其中最具有代表性的避免死鎖演算法是銀行家演算法。

(3)檢測死鎖

首先為每個程序和每個資源指定乙個唯一的號碼;

然後建立資源分配表和程序等待表。

(4)解除死鎖:

當發現有程序死鎖後,便應立即把它從死鎖狀態中解脫出來,常採用的方法有:

剝奪資源:從其它程序剝奪足夠數量的資源給死鎖程序,以解除死鎖狀態;

撤消程序:可以直接撤消死鎖程序或撤消代價最小的程序,直至有足夠的資源可用,死鎖狀態消除為止;所謂代價是指優先順序、執行代價、程序的重要性和價值等。

總結:死鎖預防要求使用者程序事先申報所需的資源或按嚴格的規程申請資源,而死鎖檢測原則上應允許死鎖發生,在適當的時機檢查,若發生死鎖,則設法排除之。與預防死鎖相比,後者過於放手,致使死鎖頻繁。而避免死鎖則以事務撤消為前提,當不能獲得資源批准時,立刻進行死鎖檢測。它既不像預防死鎖那樣過於保守,也不象死鎖檢測那樣過於放開,由於檢測及時,由歸納法可知,在已獲准等待的事務中,不可能存在死鎖,所以檢測演算法比較簡單。

死鎖的概念,產生和預防

1.死鎖的基本概念 死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種 阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了 死鎖,這些永遠在互相等待的程序稱為死鎖程序。2.產生死鎖的4個必要條件 互斥條件 程序要求對所分配的資源進行排它...

死鎖的產生與預防

在多執行緒中,為了保證執行緒安全,我們會使用互斥鎖,在某些程序或者執行緒中,使用了某些資源,為了完成任務,需要請求某些程序或執行緒所擁有的資源,從而形成了永久性等待狀態 1.互斥條件 乙個資源每次只能被乙個執行流執行 2.請求與保持 乙個資源想要獲取資源時阻塞,不會釋放已有資源 3.不可剝奪條件 乙...

產生死鎖的條件和預防死鎖的方法

產生死鎖的條件 互斥條件 指程序對所分配到的資源進行排它性使用,即在一段時間內某資源只由乙個程序占用。如果此時還有其它程序請求資源,則請求者只能等待,直至占有資源的程序用畢釋放。請求和保持條件 指程序已經保持至少乙個資源,但又提出了新的資源請求,而該資源已被其它程序占有,此時請求程序阻塞,但又對自己...