死锁的4个必要条件和处理策略
1、死鎖的例子:
? ? ? 資源A、B,進程C、D描述如下:
資源A和資源B,都是不可剝奪資源,
現(xiàn)在進程C已經(jīng)申請了資源A,進程D也申請了資源B,
進程C接下來的操作需要用到資源B,而進程D恰好也在申請資源A,
進程C、D都得不到接下來的資源,那么就引發(fā)了死鎖。
2、死鎖的四個必要條件:
互斥條件(Mutual exclusion):資源不能被共享,只能由一個進程使用。
請求與保持條件(Hold and wait):已經(jīng)得到資源的進程可以再次申請新的資源。
不可剝奪剝奪條件(No pre-emption):已經(jīng)分配的資源不能從相應的進程中被強制地剝奪。
環(huán)路條件/循環(huán)等待條件(Circular wait):系統(tǒng)中若干進程組成環(huán)路,該環(huán)路中每個進程都在等待相鄰進程正占用的資源。
3、處理死鎖的策略
1) 死鎖預防:
? ? ?預先靜態(tài)分配法:破壞了“不可剝奪條件”
? ? ?資源有序分配法:破壞了“環(huán)路條件”
2)死鎖避免:設法破壞4個必要條件之一,嚴格防止死鎖的發(fā)生
? ? ?銀行家算法:若發(fā)現(xiàn)分配資源后進入不安全狀態(tài),則不予分配;若扔處于安全狀態(tài),則實施分配。
3)死鎖檢測:
? ? ?允許死鎖產(chǎn)生,定時地運行一個死鎖檢測程序,判斷系統(tǒng)是否發(fā)生死鎖。
4)死鎖解除:
?? 資源剝奪法
撤銷進程法
? ? ??
總結
以上是生活随笔為你收集整理的死锁的4个必要条件和处理策略的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux进程间通讯
- 下一篇: ios多线程开发的常用三种方式