操作系统第6次实验报告:使用信号量解决进程互斥访问
- 姓名 彭晨
- 学号 201821121039
- 班级 计算1812
1. 选择哲学家进餐问题
2. 给出伪代码
问题思考:
具体问题:在圆桌上有五个碗和五支筷子,平时一个哲学家进行思考,饥饿时便试图取用其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐。进餐完毕,放下筷子又继续思考;哲学家进餐问题可看作是并发进程并发执行时处理共享资源的一个有代表性的问题。
问题分析:由问题描述可知,哲学家共享的五只筷子是临界资源,为实现筷子的互斥使用,可为每只筷子设置一个互斥信号量,初值为1,使用一个信号量数组来表示。为描述方便,对每个哲学家进行编号:0~4;五只筷子及其对应的信号量编号也是0~4,且与哲学家编号相同的筷子位于该哲学家左侧。
具体方案:每个哲学家都先取其左侧的筷子,成功后再取其右侧的筷子,取到两只筷子后就进餐;进餐完毕后再一次释放着两只筷子。
原始代码:如果五个哲学家同时成功取到左边的筷子,之后再取右边的筷子时都会失败。五个哲学家都等待右侧筷子而不能吃饭,且都不能释放已取到的左边的筷子,此时进入死锁状态
改善代码:至多只允许四个哲学家同时进餐,以保证至少有一个哲学家能够进餐,最终总会释放出他所使用过的两支筷子,从而可使更多的哲学家进餐。(避免死锁)
3. 给出完整代码
4. 运行结果并解释
综上所述,解决这一类问题的关键是找出对应的控制关系,设定相应的控制信号量。另外,产生死锁是在用信号量进行流程控制过程中常会遇到的一个问题,因此如何避免死锁就是解决该类问题的关键。