數據庫以及線程發生死鎖的原理及必要條件,如何避免死鎖


產生死鎖的原因主要是:
(1) 因為系統資源不足。
(2) 進程運行推進的順序不合適。
(3) 資源分配不當等。
產生死鎖的四個必要條件:
(1)互斥條件:一個資源每次只能被一個進程使用。
(2)請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。
(3)不可剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。
(4)循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關系。

避免死鎖:
死鎖的預防是通過破壞產生條件來阻止死鎖的產生,但這種方法破壞了系統的並行性和並發性。
死鎖產生的前三個條件是死鎖產生的必要條件,也就是說要產生死鎖必須具備的條件,而不是存在這3個條件就一定產生死鎖,那么只要在邏輯上回避了第四個條件就可以避免死鎖。
避免死鎖采用的是允許前三個條件存在,但通過合理的資源分配算法來確保永遠不會形成環形等待的封閉進程鏈,從而避免死鎖。該方法支持多個進程的並行執行,為了避免死鎖,系統動態的確定是否分配一個資源給請求的進程。
預防死鎖:具體的做法是破壞產生死鎖的四個必要條件之一。

銀行家算法:該算法需要檢查申請者對各類資源的最大需求量,如果現存的各類資源可以滿足當前它對各類資源的最大需求量時,就滿足當前的申請。換言之,僅當申請者可以在一定時間內無條件歸還它所申請的全部資源時,才能把資源分配給它。這樣申請者就可以很快完成其計算,然后釋放它占用的資源,從而保證了系統中的所有進程都能完成,所以可以避免死鎖的發生。這種算法的主要問題是,要求每個進程必須先知道資源的最大需求量,而且在系統的運行過程中,考察每個進程對各類資源的申請需花費較多的時間。另外,這一算法本身也有些保守,因為它總是考慮最壞可能的情況。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM