- 哲学家进餐问题 - 问题背景 - 操作系统发展史中的重要地位 - 涉及信号量机制、管程机制、资源竞争和死锁机制 - 问题描述 - 五位哲学家围坐圆桌 - 每人需两只筷子才能进餐 - 筷子为临界资源,用信号量表示 - 问题约束条件 - 必须拿到左右两支筷子才能进餐 - 叉子被占用时需等待 - 未拿到两支筷子前不能放下手中筷子 - 问题分析 - 并发执行可能导致死锁 - 所有哲学家同时拿起左边筷子导致饥饿 - 解决方案 - 方法一:限制最多四位哲学家同时进餐 - 使用信号量count控制并发数 - 方法二:使用AND型信号量 - 同时申请左右筷子,避免单只筷子占用 - 方法三:增加互斥信号量mutex - 保护取筷子操作为原子操作 - 方法四:奇偶哲学家不同取筷顺序 - 奇数号先左后右,偶数号先右后左 - 破坏环路等待条件 - 问题推广 - N个进程与M个共享资源的通用问题 - 工具与方法 - 拍摄网 - 并发程序设计语言 - 实际应用 - 操作系统线程同步 - 生活中人行马路同步问题