Appearance
题目
某系统有 n 台互斥使用的同类设备,三个并发进程分别需要 3、4、5 台设备,可确保系统不发生死锁的设备数 n 最小为( )。
错因
A
把三个进程的最大需求直接相加再减点:3+4+5 = 12,再随手减 3 凑出 9。但这没考虑"最坏分配"——如果只有 9 台,可能每人各拿 3、剩 0 台,三人都凑不齐自己的需求,立即死锁。直觉减出来的数没经过推导,多半不对。
C
走对了"最坏每人差 1 台"的方向,但留的余量多了 1:算成 (3-1)+(4-1)+(5-1) + 2 = 11。其实只需要"再额外多 1 台"就够——这 1 台给任意一个进程,它就能凑齐,跑完释放后链式推动其他人。多算的那 1 台是冗余。
D
直接选了三人需求之和 3+4+5 = 12,认为"凑齐三人最大需求"就稳。这确实绝对不死锁,但远远超过最少需求——题问"最小",12 是过度配置。
总解析
死锁的本质是"每人都拿了点资源、都不够、都在互等"。要保证不死锁,最坏情况下系统必须至少能让一个进程凑齐——它跑完后释放资源,链式推动其他进程。
最坏分配推导:
让每个进程都"差 1 台才完成"——这是最危险的状态。三个进程在差 1 台时各自持有:
| 进程 | 最大需求 | 已分配(最坏:差 1 台) |
|---|---|---|
| P1 | 3 | 2 |
| P2 | 4 | 3 |
| P3 | 5 | 4 |
| 合计已分配 | 2 + 3 + 4 = 9 |
如果总台数 = 9:所有人都差 1 台、可用 = 0 → 死锁。
如果总台数 = 10:所有人都差 1 台后,还多 1 台——把这 1 台给任意一人(比如 P1),它就能凑齐 3 台并跑完 → 释放 3 台 → 总可用 = 4 → 喂给 P2 凑齐 4 台 → 释放 → 喂给 P3 凑齐 5 台 → 全部完成。
如果总台数 < 10:总有最坏分配让所有人差 1 台、还无余量。
通用公式(k 个同类资源进程,每个最多需 台,同类资源):
代入本题 :
最终答案是 B。