5 位哲学家围坐圆桌,交替进行思考和就餐。桌上放着 5 根筷子,每两位相邻哲学家之间放一根。哲学家必须同时拿到左右两根筷子才能就餐。
若每位哲学家都执行「先拿左筷、再拿右筷」,当 5 人同时拿起左筷时,每人持有一根、等待右筷 → 死锁!此时死锁四条件全部满足:互斥、持有并等待、不可抢占、循环等待。
最多允许 4 位哲学家同时尝试拿筷子(信号量 room = 4)。至少 1 根空闲,必有人能拿两根,破坏循环等待。
偶数哲学家「先左后右」,奇数哲学家「先右后左」,打破对称性,不会形成循环等待。
用 Swait(chopstick[i], chopstick[(i+1)%5]) 原子性地同时获取两根资源,破坏「持有并等待」。
用管程的 pickup / putdown 与 test(i) 调度,只有左右邻居都不在就餐时才允许就餐。
| 考点 | 要点 |
|---|---|
| 写出完整伪代码 | 给定方案,用 P/V 操作写出哲学家进程 |
| 分析死锁原因 | 四条件分析(互斥 / 持有等待 / 不可抢占 / 循环等待) |
| 证明方案正确性 | 说明为何不会死锁 |
| 信号量初值 | 筷子信号量 chopstick[5] 初值均为 1 |
本卡暂无关联卡片(md 中 related 为空)。可用下方导航回到进程管理其他主题。