死锁条件
死锁(deadlock)是指两个进程被相互阻塞,并且一直处于这样的状态。
大部分死锁都和资源有关,按占用方式来看,资源分为两类:可抢占资源和不可抢占资源。可抢占资源(preemptable resource)可以从拥有它的进程中抢占而不会产生任何副作用;不可抢占资源(nonpreemptable resource)是指不能从当前占用它的进程中强行抢占的资源,必须由拥有者主动释放。
Coffman 总结了发生死锁的四个必要条件:
- 相互排斥,并发进程同时拥有资源的独占权。
- 等待条件,并发进程必须同时拥有一个资源,并等待额外的资源。
- 不可抢占,并发进程拥有的资源只能被该进程释放。
- 循环等待,一个并发进程(P1)必须等待一系列的其他并发进程(P2)这些并发进程同时也在等待进程(P1)
死锁发生时,一定同事满足这四个条件,如果其中某一条件不满足,死锁就不会发生。