产生死锁的四个必要条件:
1、互斥使用(资源独占)
一个资源每次只能给一个进程使用
2、不可强占(不可剥夺)
资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放
3、请求和保持(部分分配,占有申请)
一个进程在申请新的资源的同时保持对原有资源的占有(只有这样才是动态申请,动态分配)
4、循环等待
存在一个进程等待队列
{P1 , P2 , … , Pn},
其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路
避免死锁:
理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和 解除死锁。所以,在系统设计、进程调度等方面注意如何具体的做法是破坏产生死锁的四个必要条件之一。
死锁的预防是通过破坏产生条件来阻止死锁的产生,但这种方法破坏了系统的并行性和并发性。
避免死锁,该方法同样属于事先预防的策略,当它并不事先采取各种限制措施去破坏产生死锁的四个必要条件,而是在资源的动态分配过程中,用某种方法去限制系统进入不安全状态,从而避免发生死锁。
检测死锁,预先可不采取任何限制措施,允许系统运行过程发生死锁。但可通过系统所设置的检测条件,检测并清除已发生死锁。
解除死锁:实现难度较大,与检测死锁相配套
如果需要对死锁的产生机制,必要条件,应对措施有更加深入的了解,可以参考计算机操作系统(汤小丹老师主编)