哲学家进餐问题学习卡片
- 5位哲学家围坐在圆桌旁,每人左右各有一根筷子(共5根)
- 哲学家只有两种行为:思考或进餐
- 进餐规则:
- 必须同时拿到左右两根筷子才能进餐
- 若筷子被占用则需等待
- 进餐完毕后放下筷子继续思考
- 资源竞争特点:
- 每位哲学家需要同时获取两个临界资源(左右筷子)
- 相邻哲学家共享同一根筷子(互斥访问)
- 初始解决方案的死锁风险:
- 所有哲学家同时拿起左边筷子,无法获取右边筷子而永久等待
- 形成"循环等待"条件
- 核心思想:最多允许4位哲学家同时进餐
- 实现原理:
- 设置初始值为4的同步信号量
- 保证至少有一位哲学家能获得两根筷子
- 打破"循环等待"的必要条件
- 执行顺序:
- 优势:
- 相邻哲学家会竞争同一根筷子
- 确保至少一人能完整获取两根筷子
- 避免"持有并等待"情况
- 实现方式:
- 确保拿筷子操作是原子性的
- 哲学家要么完整拿到两根筷子,要么一根都拿不到
- 防止部分获取导致的死锁
- 关键点:
- 理解多资源竞争场景下的死锁条件
- 掌握三种典型解决方案的实现原理
- 问题特征:
- 每个进程需要同时持有多个临界资源
- 资源分配存在环形依赖
- 解决思路:
- 破坏死锁四个必要条件之一(特别是"循环等待")
- 通过资源预分配或执行顺序限制避免死锁