死锁检测与解除是一种事后策略:不预防也不避免,允许死锁发生,但提供检测和恢复机制。
每次资源请求时检测(开销大但及时)、周期性检测(开销较小但延迟)、CPU 利用率低于阈值时检测(启发式)。
| 检测方法 | 适用场景 | 时间复杂度 |
|---|---|---|
| 资源分配图化简 | 单实例资源 | $O(n^2)$ |
| 等待图检测 | 单实例资源 | $O(n^2)$ |
| 类银行家算法 | 多实例资源 | $O(m \times n^2)$ |
| 解除方法 | 优点 | 缺点 |
|---|---|---|
| 终止所有死锁进程 | 彻底 | 代价最大 |
| 逐个终止 | 代价较小 | 可能需要多次检测 |
| 资源抢占 | 保持进程运行 | 可能导致饥饿或回滚 |
| 考法 | 解题套路 |
|---|---|
| 资源分配图化简 | 找请求可满足的进程 → 移除边 → 重复 → 判断是否完全化简 |
| 单实例有环 | 有环 $\iff$ 死锁(充要条件) |
| 多实例有环 | 有环是必要非充分条件(有环可能没死锁) |
| 死锁定理 | 不可完全化简 $\iff$ 死锁 |
| 解除方法选择 | 考虑优先级、执行时间、资源占用量 |
↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。