1、死鎖定義:死鎖是程序死鎖的簡稱,是兩個或兩個以上程序無限期地等待永遠都不會發生的條件,系統處於停滯狀態。
注:死鎖不僅可發生在硬體資源上,由於設計不當,也有可能發生在軟體資源的使用上。
2、產生死鎖的必要條件
在系統中,如果以下4個問題同時成立,死鎖就會發生
(1)互斥條件:必須有乙個資源以非共享的方式被程序持有;更確切的說,同時只有乙個程序可以使用該資源。如果另乙個程序請求這個資源,那麼該程序必須等待這個資源被釋放。
(2)持有並等待條件:程序至少必須持有乙個資源且等待獲取另外的當前被其他程序持有的資源。
(3)不可搶占條件:不可以搶占資源。已分配給某程序的資源不可被搶占,資源的釋放只能是由持有者程序完成工作後自動釋放。
注:這4個條件必須全部成立時死鎖才會發生。迴圈等待條件意味著持有等待條件,因此這4個條件並不是完全獨立的。
3、死鎖處理方法之預防死鎖
如2所述,只有4個必要條件同時成立才會發生死鎖。只要保證其中乙個條件不會成立,就可以預防死鎖。
(1)互斥條件:必須確保對不可共享資源的互斥條件,例如多個程序不可以共享一台印表機。也就是說,可共享資源不要求互斥訪問,這樣共享資源就不會包含在死鎖中。
注:通常很難通過阻止互斥條件來預防死鎖問題,有些資源本來就是不可已共享的。
(2)持有並等待條件:為了確保不會發生持有並等待條件,必須確保:不論程序何時請求資源,它都不可以持有其他任何資源。
策略一:要求程序在開始前請求並獲取所有所需的資源你,以保證它在執行期間不再需要請求另外的資源。實質為資源的靜態分配,也稱為預分資源策略。
策略二:允許程序只有在不占用任何資源的情況下請求資源。程序可以請求一些資源並使用它們,在它們請求其他資源之前必須釋放當前持有的所有資源。也稱為空資源請求策略。
注:程序在執行前不可能知道它所需要的全部資源,程序在執行過程中是動態的、不可**的。
(3)不可搶占條件:不可搶占已分配給程序的資源。為確保該條件不會發生,可採用一下策略:
策略一:持有一些資源並請求另外的資源的程序如果不能立刻獲取所請求的資源,那麼當前持有程序的所有資源被搶占(釋放)。只有這個程序可以獲取它的舊資源和所請求的資源時,才可以重新執行。
策略二:搶占等待者的資源:如果乙個程序請求一些資源,先檢查這些資源是否可用,可用則分配,不可用就檢查是否被分配給其他等待其他資源的程序,若如此,則從這些等待程序前瞻所需資源。
(4)迴圈等待條件:確保該條件不會發生:實行資源有序分配策略,對所有資源進行分類排序,並要求程序以遞增的順序請求資源,避免程序請求、占用資源,不會出現環路。
4、死鎖處理方法之避免死鎖
a、安全狀態:如果系統能夠以某些順序為每乙個程序分配資源(可滿足程序的最大需求)並依然可以死避免死鎖,那麼系統的狀態是安全的。
b、資源分配圖演算法
c、銀行家演算法
注:這兩個演算法不在此敘述,之後有需求單獨處理。
boost死鎖相關問題
讀寫鎖的實現 typedef boost shared lockreadlock typedef boost unique lockwritelock boost shared mutex rwmutex void readonly void writeonly 對同乙個rwmutex,執行緒可以同...
死鎖相關知識的學習
一組程序中,每個程序都無限等待被改組程序中另乙個程序所占有的資源,因而永遠無法得到的資源,這種現象稱為程序死鎖,這一組程序就稱為死鎖程序。如果死鎖發生,會浪費大量系統資源,甚至導致系統崩潰。需要注意 1.資源數量有限 鎖和訊號量錯誤使用 1.1資源的使用方式 申請 分配 使用 釋放 模式 可消耗資源...
死鎖及相關問題
系統中的資源可以分為兩類,一類是可剝奪資源,是指某程序在獲得這類資源後,該資源可以再被其他程序或系統剝奪。cpu和主存均屬於可剝奪性資源。另一類資源是不可剝奪資源,當系統把這類資源分配給某程序後,再不能強行收回,只能在程序用完後自行釋放,如磁帶機 印表機等。死鎖是指兩個或兩個以上的程序在執行過程中,...