一、死锁的概念
什么是死锁
死锁、饥饿、死循环的区别
死锁产生的必要条件
什么时候会发生死锁
死锁的处理策略
知识回顾与重要考点
二、死锁的处理策略——预防死锁
知识总览
破坏互斥条件
破坏不剥夺条件
破坏请求和保持条件
破坏循环等待条件
知识回顾与重要考点
与前面哲学家进餐问题中三种解决死锁的方法对应起来
三、死锁的处理策略——避免死锁
知识总览
什么是安全序列
安全序列、不安全状态、死锁的联系
如果系统处于安全状态,就一定不会发生死锁。如果系统进入不安全状态,就可能发生死锁(处于不安全状态未必就是发生了死锁,但发生死锁时一定是在不安全状态)
因此可以在资源分配之前预先判断这次分配是否会导致系统进入不安全状态,以此决定是否答应资源分配请求。这也是“银行家算法”的核心思想。
银行家算法
实际做题(手算)时可用更快速的方法找到一个安全序列:
再看一个找不到安全序列的例子:
接下来看用代码如何实现银行家算法:
知识回顾与重要考点
四、死锁的处理策略——检测和解除
知识总览
死锁的检测
再来看一个不能消除所有边(死锁)的: