資料庫以及執行緒發生死鎖的原理及必要條件,如何避免死鎖
(2)請求與保持條件:一個程序因請求資源而阻塞時,對已獲得的資源保持不放。
(3)不可剝奪條件:程序已獲得的資源,在末使用完之前,不能強行剝奪。
(4)迴圈等待條件:若干程序之間形成一種頭尾相接的迴圈等待資源關係。
避免死鎖:
死鎖的預防是通過破壞產生條件來阻止死鎖的產生,但這種方法破壞了系統的並行性和併發性。
死鎖產生的前三個條件是死鎖產生的必要條件,也就是說要產生死鎖必須具備的條件,而不是存在這3個條件就一定產生死鎖,那麼只要在邏輯上回避了第四個條件就可以避免死鎖。
避免死鎖採用的是允許前三個條件存在,但通過合理的資源分配演算法來確保永遠不會形成環形等待的封閉程序鏈,從而避免死鎖。該方法支援多個程序的並行執行,為了避免死鎖,系統動態的確定是否分配一個資源給請求的程序。
預防死鎖:具體的做法是破壞產生死鎖的四個必要條件之一。