死锁产生的必要条件
首先,要注意此处的“必要条件”,和数学中充分必要的定义是一致的,即:
(1)如果产生了死锁,那么必要条件一定成立;
(2)反之,如果所有必要条件均成立,也不一定会死锁。(这是很容易弄混的一点。)
另外,(1)的逆否命题:
(3)如果其中任意一个必要条件不成立,那么就不会死锁。
死锁预防
死锁预防是死锁处理策略之一。就是根据上述(3)的原理,通过设置某些限制条件,破坏产生死锁的4个必要条件中的一个或多个,以防止死锁。
必要条件之一:循环等待
必要条件中的循环等待是指:存在一种进程资源的循环等待链。即存在首尾相连的环(资源分配图)
此处举出两种情况:(图来自王道)
图1:满足循环等待,且死锁。
图2:满足循环等待,但没有死锁,因为Pn请求的资源可以通过P0或Pk任一进程释放后得到,一旦Pk释放,就会打破循环等待的局面。
可见死锁定义中的循环等待环规定的要求更严格,不允许申请到圈外的进程释放的资源,只能圈里的进程们内耗。
所以,当每类资源的数目大于1,资源分配图就算有环,也不一定死锁,要具体分析;但是如果每种资源只有一个,此时再出现环就一定死锁。