死鎖的四個必要條件以及處理策略

2021-08-31 01:48:37 字數 889 閱讀 1233

什麼是死鎖?

如果乙個程序集合裡面的每個程序都在等待只能由這個集合中的其他乙個程序(包括他自身)才能引發的事件,這種情況就是死鎖。

這個定義可能有點拗口,乙個最簡單的例子就是有資源a和資源b,都是不可剝奪資源,現在程序c已經申請了資源a,程序d也申請了資源b,程序c接下來的操作需要用到資源b,而程序d恰好也在申請資源a,那麼就引發了死鎖。這個肯定每個人都看過了。然後套用回去定義:如果乙個程序集合裡面(程序c和程序d)的每個程序(程序c和程序d)都在等待只能由這個集合中的其他乙個程序(對於程序c,他在等程序d;對於程序d,他在等程序c)才能引發的事件(釋放相應資源)。

這裡的資源包括了軟的資源(**塊)和硬的資源(例如掃瞄器)。資源一般可以分兩種:可剝奪資源(preemptable)和不可剝奪資源(nonpreemptable)。一般來說對於由可剝奪資源引起的死鎖可以由系統的重新分配資源來解決,所以一般來說大家說的死鎖都是由於不可剝奪資源所引起的。

死鎖的四個必要條件

互斥條件(mutual exclusion):資源不能被共享,只能由乙個程序使用。

請求與保持條件(hold and wait):已經得到資源的程序可以再次申請新的資源。

非剝奪條件(no pre-emption):已經分配的資源不能從相應的程序中被強制地剝奪。

迴圈等待條件(circular wait):系統中若干程序組成環路,改環路中每個程序都在等待相鄰程序正占用的資源。

處理死鎖的策略

1.忽略該問題。例如鴕鳥演算法,該演算法可以應用在極少發生死鎖的的情況下。為什麼叫鴕鳥演算法呢,因為傳說中鴕鳥看到危險就把頭埋在地底下,可能鴕鳥覺得看不到危險也就沒危險了吧。跟掩耳盜鈴有點像。

2.檢測死鎖並且恢復。

3.仔細地對資源進行動態分配,以避免死鎖。

4.通過破除死鎖四個必要條件之一,來防止死鎖產生

死鎖,死鎖的四個必要條件以及處理策略

死鎖是指兩個或兩個以上的程序 執行緒 在執行過程中因爭奪資源而造成的一種僵局,若無外力作用,這些程序 執行緒 都將無法向前推進。飢餓 starvation 指乙個程序一直得不到資源。死鎖和飢餓都是由於程序競爭資源而引起的。飢餓一般不占有資源,死鎖程序一定占有資源。互斥 至少有乙個資源必須處於非共享模...

死鎖的四個必要條件

作業系統中有若干程序併發執行,它們不斷申請 使用 釋放系統資源,雖然系統的進 程協調 通訊機構會對它們進行控制,但也可能出現若干程序都相互等待對方釋放資源才能 繼續執行,否則就阻塞的情況。此時,若不借助外界因素,誰也不能釋放資源,誰也不能解 除阻塞狀態。根據這樣的情況,作業系統中的死鎖被定義為系統中...

死鎖的四個必要條件

作業系統中有若干程序併發執行,它們不斷申請 使用 釋放系統資源,雖然系統的進 程協調 通訊機構會對它們進行控制,但也可能出現若干程序都相互等待對方釋放資源才能 繼續執行,否則就阻塞的情況。此時,若不借助外界因素,誰也不能釋放資源,誰也不能解 除阻塞狀態。根據這樣的情況,作業系統中的死鎖被定義為系統中...