死锁的必要条件
产生死锁的四个必要条件:
- 互斥: 一个资源一次只能分配给一个进程使用。
- 占有且等待: 一个进程在等待其他进程释放资源的同时,继续占有已经拥有的资源。
- 不可抢占: 一个进程不能强行占有其他进程已占有的资源。
- 循环等待:若干进程由于等待其他进程释放资源,而形成相互等待的循环。如进程A等待进程B,进程B等待进程C,•••,进程X等待进程Y,进程Y等待进程A。
如何检测死锁
(1)操作系统周期性地执行算法检测是有存在循环等待,如果存在,则对死锁进行恢复。
(2)可以利用资源分配图,检测有向图中是否存在环。如果存在环,表明死锁可能发生,采取措施进行恢复。
具体实现: 从一个节点出发进行深度优先搜索(DFS),对访问过的节点进行标记。如果访问了已经标记的节点,就表示有向图存在环,即检测到死锁的发生。
下面这个资源分配图存在环,并且死锁已经发生:
下面这个资源分配图存在环,但是死锁并没有发生(因为每种类型存在多个资源):