Appearance
题目
下列关于死锁的叙述中,正确的是( )。
Ⅰ、可以通过剥夺进程资源解除死锁 Ⅱ、死锁的预防方法能确保系统不发生死锁 Ⅲ、银行家算法可以判断系统是否处于死锁状态 Ⅳ、当系统出现死锁时,必然有两个或两个以上的进程处于阻塞态
错因
A
承认 Ⅱ Ⅲ 而不要 Ⅰ Ⅳ,最致命的是漏了 Ⅰ——剥夺资源就是死锁解除的标准手段(资源剥夺法)。同时 Ⅲ 也是错的:银行家算法用于避免死锁(事前不让系统进入不安全状态),不是检测已经发生的死锁。死锁的"避免 / 检测 / 解除"是三件不同的事,混了就走偏。
C
承认 Ⅰ Ⅱ Ⅲ。Ⅰ Ⅱ 都对,但选了 Ⅲ 同样掉进"避免 vs 检测"的坑——银行家算法是事前判定一次资源分配会不会让系统进不安全状态,做的是预防性放行;判断系统当前是不是真的死了得用死锁检测算法(基于资源分配图查环、或简化算法)。两者目标和算法都不同。
D
承认 Ⅰ Ⅲ Ⅳ,漏了 Ⅱ 反而把错的 Ⅲ 选上了——可能在权衡 Ⅱ 时被"预防能不能 100% 保证"这种学术怀疑卡住,但教材给的预防四种方法(破坏互斥/请求保持/不剥夺/循环等待之一)任选一种就能绝对避免死锁,这是设计的硬保证,不该排除。
总解析
死锁知识点容易混的是"预防 / 避免 / 检测 / 解除"四件事的角色,先理清:
| 策略 | 时机 | 做什么 | 典型方法 |
|---|---|---|---|
| 预防 | 事前(系统设计时) | 破坏死锁四条件之一 | 一次性分配 / 顺序申请 / 可剥夺 |
| 避免 | 运行时分配前 | 判断"分配后是否仍安全",否则不分配 | 银行家算法 |
| 检测 | 运行时定期查 | 看现在是不是已经死锁了 | 资源分配图算法 / 检测算法 |
| 解除 | 检测到死锁后 | 让系统恢复 | 剥夺资源 / 撤销进程 / 回滚 |
逐条判:
- Ⅰ 剥夺资源解除死锁 → ✓ 这是死锁解除的标准手段(资源剥夺法)
- Ⅱ 预防方法能确保不发生死锁 → ✓ 预防的设计目标就是绝对杜绝(破坏 4 条件之一)
- Ⅲ 银行家算法判断是否处于死锁状态 → ✗ 银行家是避免算法(事前判断分配后是否仍安全),不是检测算法。判定"现在是否死锁"是检测算法的工作
- Ⅳ 死锁时必有 ≥2 进程阻塞 → ✓ 死锁本质是"循环等待",至少要 2 个进程互相等才能形成循环
正确的是 Ⅰ Ⅱ Ⅳ。
最终答案是 B。