死鎖及相關問題

2021-09-25 11:55:15 字數 1659 閱讀 9967

系統中的資源可以分為兩類,一類是可剝奪資源,是指某程序在獲得這類資源後,該資源可以再被其他程序或系統剝奪。,cpu和主存均屬於可剝奪性資源。另一類資源是不可剝奪資源,當系統把這類資源分配給某程序後,再不能強行收回,只能在程序用完後自行釋放,如磁帶機、印表機等。

死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。

雖然程序在執行過程中,可能發生死鎖,但死鎖的發生也必須具備一定的條件,死鎖的發生必須具備以下四個必要條件。[2]

1)互斥條件:指程序對所分配到的資源進行排它性使用,即在一段時間內某資源只由乙個程序占用。如果此時還有其它程序請求資源,則請求者只能等待,直至占有資源的程序用畢釋放。

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

3)不剝奪條件:指程序已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。

4)環路等待條件:指在發生死鎖時,必然存在乙個程序——資源的環形鏈,即程序集合中的p0正在等待乙個p1占用的資源;p1正在等待p2占用的資源,……,pn正在等待已被p0占用的資源。

預防死鎖、避免死鎖、檢測死鎖、解除死鎖

1)破壞請求和保持條件:在系統中不允許程序在已獲得某種資源的情況下,申請其他資源,即要想出乙個辦法,阻止程序在持有資源的同時申請其它資源。

方法一:在所有程序開始執行之前,必須一次性的申請其在整個執行過程中所需的全部資源,這樣,該程序在整個執行期間便不會再提出資源請求,從而破壞了「請求」條件。系統在分配資源時,只要有一種資源不能滿足程序的需要,即使其它所需的各資源都空閒也不分配給該程序,而讓該程序等待,由於該程序在等待期間未占用任何資源,於是破壞了「保持」條件。

方法二:要求每個程序提出新的資源申請前,釋放它所占有的資源。這樣,乙個程序在需要資源s時,需要先把它先前占有的資源r釋放掉,然後才能提出對s的申請,即使它很快又要用到資源r。

兩種協議比較:第二種協議優於第一種協議,因為第一種協議會造成資源的嚴重浪費,使資源利用率大大的降低,也會由於佔據大量資源導致其它程序的飢餓問題。

(2)破壞不可搶占條件:允許對資源實行搶奪。

方式一:如果占有某些資源的乙個程序進行進一步資源請求被拒絕,則該程序必須釋放它最初占有的資源,如果有必要,可再次請求這些資源和另外的資源。

方式二:如果乙個程序請求當前被另乙個程序占有的資源,則作業系統可以搶占另乙個程序,要求它釋放資源,只有在任意兩個程序的優先順序都不相同的條件下,該方法才能預防死鎖。

(3)破壞迴圈等待條件

對系統所有資源進行線性排序並賦予不同的序號,這樣我們便可以規定程序在申請資源時必須按照序號遞增的順序進行資源的申請,當以後要申請時需檢查要申請的資源的編號大於當前編號時,才能進行申請。

銀行家演算法

打破死鎖有兩種方法:

(1)簡單地終止乙個或多個程序以打破迴圈等待。——程序終止

(2)從乙個或多個死鎖程序那裡搶占乙個或多個資源。——資源搶占

(3)終止所有死鎖程序。

(4)一次只終止乙個程序直到取消死鎖迴圈為止。

boost死鎖相關問題

讀寫鎖的實現 typedef boost shared lockreadlock typedef boost unique lockwritelock boost shared mutex rwmutex void readonly void writeonly 對同乙個rwmutex,執行緒可以同...

死鎖相關問題分析

1 死鎖定義 死鎖是程序死鎖的簡稱,是兩個或兩個以上程序無限期地等待永遠都不會發生的條件,系統處於停滯狀態。注 死鎖不僅可發生在硬體資源上,由於設計不當,也有可能發生在軟體資源的使用上。2 產生死鎖的必要條件 在系統中,如果以下4個問題同時成立,死鎖就會發生 1 互斥條件 必須有乙個資源以非共享的方...

oracle死鎖問題查詢及處理

oracle死鎖問題查詢及處理 一 資料庫死鎖的現象 www.2cto.com 程式在執行的過程中,點選確定或儲存按鈕,程式沒有響應,也沒有出現報錯。二 死鎖的原理 當對於資料庫某個表的某一列做更新或刪除等操作,執行完畢後該條語句不提 交,另一條對於這一列資料做更新操作的語句在執行的時候就會處於等待...