Appearance
题目
某计算机系统中有 8 台打印机,由 K 个进程竞争使用,每个进程最多需要 3 台打印机。该系统可能会发生死锁的 K 的最小值是( )。
错因
A
K = 2 时两进程总共最多需要 6 台打印机,8 台远远够分——不可能死锁。把"竞争资源就可能死锁"绝对化是没算最坏分配下的资源数对比。
B
K = 3 时最坏每人持 2 台共 6 台,剩 8 - 6 = 2 台空闲——任意一人能拿到第 3 台凑齐 → 释放 → 链式推动其他人。3 个进程不会死锁。
D
K = 5 已经能死锁,但题问"最小"K 值——5 是死锁集合的成员之一,不是最小元素。K = 4 已经能死锁了,5 不是最小答案。
总解析
死锁需要"每人都拿了一些资源、都不够、都在互等"。同类资源场景的判定:
最坏分配:每人持 (max - 1) 台资源、还差 1 台才完成。本题每人最多需 3 台,最坏每人持 2 台。
| K | 最坏每人持有 | 总占用 | 剩余 | 能否凑齐? | 是否死锁? |
|---|---|---|---|---|---|
| 2 | 2 台 | 4 | 4 | 任意一人能拿到第 3 台(剩 4 ≥ 1)→ 完成 | 不可能 |
| 3 | 2 台 | 6 | 2 | 任意一人能拿到第 3 台(剩 2 ≥ 1)→ 完成 | 不可能 |
| 4 | 2 台 | 8 | 0 | 没人能再拿到一台 → 全卡住 | 可能死锁 |
| 5 | 2 台 | 10 > 8(资源不够分了),实际最坏只能让 4 人各持 2 台、第 5 人持 0 台。第 5 人无资源也无法运行——但这不算"循环等待"。需要重看。 | 可能 |
临界条件:
代入:
K = 4 时:4 人各 2 台正好用完 8 台、剩 0 台。每人差 1 台才完成,没人能补齐 → 可能死锁。
K = 3 时:3 人各 2 台占 6 台、剩 2 台。这 2 台中任意 1 台分给某人就让它凑齐 3 台 → 完成 → 释放 3 台 → 链式推动其他人。绝对不死锁。
通用公式(n 个同类资源、k 个进程每个最多需 m 个、求"会死锁的最小 K"):
本题:。
与"保证不死锁的最小资源数"相反公式(2014-24 那题):那题给定进程数求资源下限,本题给定资源数求让 K 能死锁的下限。两条公式可以互推。
最终答案是 C。