哲学家进餐问题
一、管程数据结构定义
1 | type dining_philosophers = monitor |
二、管程过程实现
1. pickup 过程 —— 哲学家申请进餐
1 | void pickup(int i) { /* i = 0, 1, ..., 4 */ |
2. putdown 过程 —— 哲学家放下叉子
1 | void putdown(int i) { /* i = 0, 1, 2, ..., 4 */ |
3. test 过程 —— 检测哲学家是否能进餐
1 | void test(int k) { /* k = 0, 1, ..., 4 */ |
三、哲学家进程代码
1 | // 管程初始化后,任意一个哲学家想吃通心面时调用过程 pickup,吃完通心面之后调用过程 putdown。 |
一个解决示例
