1)提出
多執行緒與多程序提高了系統資源的利用率,然而併發執行也會帶來一些問題,如死鎖。
2)概念
死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。
3)死鎖在顯示生活中的例項
在乙個計算機系統中,只有乙個印表機和乙個輸入裝置。程序一正在占用輸入裝置,同時又提出使用印表機的請求,而程序二正在占用印表機,同時提出使用輸入裝置,就這樣,兩個程序只能無休止的進行等待,兩個程序就會陷入死鎖狀態。
產生死鎖必須同時滿足以下四個條件
1)互斥條件
指程序對所分配的資源進行排他性使用,即在某一時刻,某一資源只能由乙個程序占用,如果其他程序請求資源,則讓其他程序進行等待,直到占用程序釋放。
2)請求和保持條件
指程序已經占有至少乙個資源,但又提出了新的資源請求,而該資源已被其它程序占有,此時請求程序阻塞,但又對自己已獲得的其它資源保持不放。
3)不剝奪條件
指程序占有某個資源後,在沒有自己主動釋放時,該資源不能被剝奪。
4)環路等待條件
指在發生死鎖時,必然存在乙個程序——資源的環形鏈,乙個等待另乙個被占用的資源。
特殊的處理方法:鴕鳥策略
就像鴕鳥一樣,遇到危險就將頭埋在地底下,假裝看不到,將危險忽略。雖然不算是乙個演算法,但在實際系統中是廣泛使用的,所以在計算機作業系統中,死鎖發生且影響系統正常執行時,手動干預—重新啟動。
1.預防死鎖
通過設定某些限制條件,去破壞產生死鎖的四個必要條件中的乙個或幾個。此方法較易實現,已被廣泛使用,但會降低系統資源利用率。
2.避免死鎖
在資源的動態分配過程中,使用某種方法去防止系統進入不安全狀態。
3.死鎖檢測並解除
通過系統所設定的檢測機構,可以及時發現與死鎖有關的程序和資源,然後將程序從死鎖狀態中解脫出來,常用的措施是撤銷或掛起一些程序(剝奪),以便**某些資源,再將這些資源分配給已處於阻塞狀態的程序,使之變為就緒態,使之繼續執行,此方法實施難度比較大。
多執行緒死鎖
這段時間剛好學到多執行緒,下面是自己對死鎖的一些感悟,並不是我說的有多到位,只是想到一種更為通俗易懂理解方式,現在和大家一起分享一下,有改進的地方,希望大家多提提意見。一 首先說一下死鎖的定義 由兩個或兩個以上的執行緒由於互相競爭資源,導致一種互相等待的狀態,如果沒有外力推動,則他們都無法進行下去。...
多執行緒死鎖
演示一種死鎖的現象 實現如圖所示的死鎖 public classdeadlockimplementsrunnable else count 解釋 死鎖 cpu程序排程是隨機的,執行緒a執行,列印了幾遍if else,這中間,count為奇數,而且執行緒2搶奪了cpu 資源進入else,而此時如果缺少...
多執行緒死鎖
模擬死鎖的過程一 public class t system.out.println m1呼叫 private void m2 system.out.println m2呼叫 public static void main string args 該方法呼叫的過程可能會產生死鎖 該死鎖的方式為在m1...