死鎖的必要條件
- 互斥:同一資源不能同時分配給兩個進程。
- 不可搶占:不能搶占已經分配給一個進程的資源。
- 占有與等待:已經得到了某個資源的進程可以再請求新的資源。
- 環(huán)路等待:多個進程組成一條環(huán)路,該環(huán)路中的每個進程都在等待下一個進程所占有的資源。
死鎖的處理方法
1. 鴕鳥策略
把頭埋在沙子里,假裝根本沒發(fā)生問題。
因為解決死鎖問題的代價很高,因此鴕鳥策略這種不采取任務措施的方案會獲得更高的性能。
當發(fā)生死鎖時不會對用戶造成多大影響,或發(fā)生死鎖的概率很低,可以采用鴕鳥策略。
大多數(shù)操作系統(tǒng),包括 Unix,Linux 和 Windows,處理死鎖問題的辦法僅僅是忽略它。
2. 死鎖預防
在程序運行之前,預防發(fā)生死鎖。
3. 死鎖避免
在程序運行時,避免發(fā)生死鎖。
4. 死鎖檢測與恢復
不試圖阻止死鎖,而是當檢測到死鎖發(fā)生時,采取措施進行恢復。