一:死锁的规范定义
如果一个进程集合中的每一个进程都在等待只能由该集合中的其他进程才能引发的事件,那么该进程集合就是死锁的。
也就是说,这个死锁的进程集合中的每一个进程都在等待另一个死锁的进程已经占有的资源。无法运行,无法释放资源,无法被唤醒。死锁最常见的类型是资源死锁,但并不是唯一的。另外还有如通信死锁等。
二:死锁发生的条件
Coffman等人总结发生(资源)死锁的4个必要条件(死锁了一定满足这4个条件,但是满足这4个条件不一定死锁):
- 互斥条件:每个资源要么已经分配给了一个进程,要么就是可用的。
- 占有和等待条件:已经得到了某个资源的进程可以再请求新的资源。
- 不可抢占条件:已经分配给一个进程的资源不能强制性地被抢占,它只能被它占有的进程显示地释放。
- 环路条件:死锁发生时,一定有两个或两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。
以上4个条件一定同时满足。如果其中任何一个条件不成立,死锁不会发生。每个条件都与系统的可选策略相关,在策略上,可以通过破坏以上条件,从而预防死锁。
三:死锁模型