什么是死锁?
如果一个进程集合中的每个进程都在等待只能由此集合中的其他进程才能引发的事件,而无限期陷入僵持的局面称为死锁,例如下面的模型:
此时进程A和进程B就永远处于这个状态,称进程A和进程B处于死锁状态。上述的概念换成线程也同样适用,为叙述简洁,这里就使用进程来叙述。
死锁条件
死锁的产生必须满足四个条件:
- 资源互斥条件:使用资源必须是独占式地,资源本身不可分割,同一资源在某时刻至多只能被一个进程使用;
- 请求和保持条件:进程在请求资源时,不释放目前占有的资源;
- 不可剥夺条件:已经被某进程获取的资源在未主动释放之前,不能被其他进程剥夺;
- 循环等待条件:若干进程之间形成头尾相连的资源等待循环。
结合上图,相信这四个条件很好理解,要形成死锁,四个条件缺一不可。
死锁预防
死锁的预防可以从破坏死锁条件入手,只要死锁条件不成立,死锁就无法形成。
- 破坏请求和保持条件:一次性分配所有资源,避免进程再次请求资源;</