以下內(nèi)容整理自互聯(lián)網(wǎng)蹋嵌,僅用于個人學(xué)習(xí)
1. 死鎖的必要條件
死鎖必須滿足四個必要條件芽隆,缺一不可询微。
- 互斥條件:進程要求對所分配的資源進行排他性控制崖瞭,即在一段時間內(nèi)某資源僅為一個進程所占有。此時若有其他進程請求該資源撑毛,則請求進程只能等待书聚。
- 不剝奪條件:進程所獲得的資源在未使用完畢之前,不能被其他進程強行奪走藻雌,即只能有獲得該資源的進程自己來釋放(只能是主動釋放)雌续。
- 請求和保持條件:進程已經(jīng)保持了至少一個資源,但又提出了新的資源請求胯杭,而該資源已經(jīng)被其他進程占有驯杜,此時請求被阻塞,但對自己已獲得的資源保持不放歉摧。
- 循環(huán)等待條件:存在一種進程資源的循環(huán)等待鏈艇肴,鏈中每一個進程已獲得的資源同時被鏈中下個進程所請求。
2. 死鎖的處理策略
2.1 預(yù)防死鎖
設(shè)置某些限制條件叁温,破壞產(chǎn)生死鎖的四個必要條件再悼,以防發(fā)生死鎖
2.2 避免死鎖
在資源動態(tài)分配過程中,防止系統(tǒng)進入不安全狀態(tài)膝但,以避免發(fā)生死鎖
2.3 死鎖的檢測與解除
死鎖解除方法:
- 資源剝奪法冲九。掛起某些死鎖進程,并搶占它的資源跟束,將這些資源分配給其他進程莺奸。但應(yīng)該防止被掛起的進程長時間得不到資源,而處于資源匱乏的狀態(tài)冀宴。
- 撤銷進程法灭贷。強制撤銷部分、甚至全部死鎖進程并剝奪這些進程的資源略贮。撤銷的原則可以按進程優(yōu)先級和撤銷進程代價的高低進行甚疟。
- 進程回退法仗岖。讓一(多)個進程回退到足以回避死鎖的地步,進程回退時自愿釋放資源而不是剝奪览妖。要求系統(tǒng)保持進程的歷史信息轧拄,設(shè)置還原點。
處理策略的比較:
| | 資源分配策略 | 各種可能模式 | 主要優(yōu)點 | 主要缺點 |
| -- |: ----------------: | :----------: | :----------: | :-------: |
| 死鎖預(yù)防 | 保守讽膏,寧可資源閑置 | 一次請求所有資源檩电,資源剝奪,資源按序分配 | 適用于做突發(fā)式處理的進程府树,不必進行剝奪 | 效率低俐末,進程初始化時 間延長;剝奪次數(shù)過多挺尾; 不便靈活申請新資源 |
| 死鎖避免 | 是”預(yù)防“和”檢測“ 的折中(在運行時判斷是 否可能死鎖) | 尋找可能的安全允許順序| 不必進行剝奪 | 必須知道將來的資源 需求鹅搪;進程不能被長時間阻塞 |
| 死鎖檢測 | 寬松,只要允許就分配資源| 定期檢查死鎖是否已經(jīng)發(fā)生 | 不延長進程初始化時間遭铺,允許對死鎖進行現(xiàn)場處理 | 通過剝奪解除死鎖丽柿,造成損失 |