经典进程同步问题3:哲学家进餐问题
from http://c.biancheng.net/cpp/html/2602.html
问题描述
一张圆桌上坐着5名哲学家,每两个哲学家之间的桌上摆一根筷子,桌子的中间是一碗米饭,如图2-10所示。哲学家们倾注毕生精力用于思考和进餐,哲学家在思考时,并不影响他人。只有当哲学家饥饿的时候,才试图拿起左、 右两根筷子(一根一根地拿起)。如果筷子已在他人手上,则需等待。饥饿的哲学家只有同时拿到了两根筷子才可以开始进餐,当进餐完毕后,放下筷子继续思考。 问题分析
1) 关系分析。5名哲学家与左右邻居对其中间筷子的访问是互斥关系。
2) 整理思路。显然这里有五个进程。本题的关键是如何让一个哲学家拿到左右两个筷子而不造成死锁或者饥饿现象。那么解决方法有两个,一个是让他们同时拿两个筷子;二是对每个哲学家的动作制定规则,避免饥饿或者死锁现象的发生。
图2-10 5名哲学家进餐
3) 信号量设置。定义互斥信号量数组Ch0PstiCk[5] = {l, 1, 1, 1, 1}用于对5个筷子的互斥访问。
对哲学家按顺序从0~4编号,哲学家i左边的筷子的编号为i,哲学家右边的筷子的编号为(i+l)%5。semaphore chopstick[5] = {1,1,1,1,1}; //定义信号量数组chopstick[5],并初始化
Pi(){ //i号哲学家的进程
do{
P (chopstick[i] ) ; //取左边筷子
P (chopstick[(i+1) %5] ) ; //取右边篌子
eat; //进餐
V(chopstick[i]) ; //放回左边筷子
V(chopstick[(i+l)%5]); //放回右边筷子
think; //思考
} while (1);
}
该算法存在以下问题:当五个哲学家都想要进餐,分别拿起他们左边筷子的时候(都恰好执行完wait(chopstick[i]);)筷子已经被拿光了,等到他们再想拿右边的筷子的时候(执行 wait(chopstick[(i+l)%5]);)就全被阻塞了,这就出现了死锁。
为了防止死锁的发生,可以对哲学家进程施加一些限制条件,比如至多允许四个哲学家同时进餐;仅当一个哲学家左右两边的筷子都可用时才允许他抓起筷子;对哲学家顺序编号,要求奇数号哲学家先抓左边的筷子,然后再转他右边的筷子,而偶数号哲学家刚好相反。正解制定规则如下:假设釆用第二种方法,当一个哲学家左右两边的筷子都可用时,才允许他抓起筷子。semaphore chopstick[5] = {1,1,1,1,1}; //初始化信号量
semaphore mutex=l; //设置取筷子的信号量
Pi(){ //i号哲学家的进程
do{
P (mutex) ; //在取筷子前获得互斥量
P (chopstick [i]) ; //取左边筷子
P (chopstick[ (i+1) %5]) ; //取右边筷子
V (mutex) ; //释放取筷子的信号量
eat; //进餐
V(chopstick[i] ) ; //放回左边筷子
V(chopstick[ (i+l)%5]) ; //放回右边筷子
think; // 思考
}while(1);
}
此外还可以釆用AND型信号量机制来解决哲学家进餐问题,有兴趣的读者可以查阅相关资料,自行思考。
相关文章
- 进程同步的教学方法探讨
- 科技论文模板 1
- 大班下学期保健计划
- 万有引力说课稿
- 申论的经典句子
- 申论最经典的语句
- 关于欧洲一体化成功原因的两点思考
- 河北:在中国历史上的重要地位和作用
- Java多线程编程经典案例
- 09级计科专业毕业设计题目
计算机时代2009年第9期 ・ 7l ・ 进程同步的教学方法探讨 白秀玲.宋晓莉,邱涌,张营.张孝国.杨春蕾(河南科技大学电子信息工程学院,河南洛阳47l003) 摘要:在操作系统课程的教学中,进程同步是其中一个重点,也是难点.进程概念较抽 ...
<操作系统原理>科技论文 题 目: 浅谈死锁问题 院 (系): 软件学院 专 业: 学生姓名: 学 号: 指导教师: 软 件 学 院 2014年1月7日 浅谈死锁问题 于文奇 (辽宁工程技术大学 软件学院 软件工程11-02 辽 ...
大班下学期保健计划一:大班下学期保健计划 当今社会,大多数家庭都是独生子女,所以父母对孩子都是百依百顺,从而形成了孩子饭来张口.衣来伸手的习惯.那么,对于幼儿园的孩子来说,必须从小做起,养成他们良好的生活习惯,懂得自己的事情自己做,还要加强 ...
§6.1 行星的运动说课稿 设计思路 本节教学既是前面<运动的描述>和<曲线运动>内容的进一步的延伸和拓展,又是为了学习万有引力定律做铺垫.在物理1的第一章<运动的描述>部分,学生已学习了参考系.运动轨迹 ...
申论的经典句子.txt如果我能够看到自己的影子,我想它一定很忧伤,因为我把快乐都留在了前面.容易伤害别人和自己的人,总是对距离的边缘模糊不清的人. 申论的经典句子 (2008-06-25 19:14:08) 标签:杂谈 总结一 第一句总述: ...
申论最经典的语句 一.提出问题 (1)正面:取得成就 转折: (2)负面:存在问题(进入主题) (一)-与-所产生的矛盾. --.如--.(提及所给材料非常必要,避免空谈之嫌) (二)-与-不同步所产生的问题. --.--相辅相成的关系:一 ...
TRADE 关于欧洲一体化成功原因的两点思考 ■ 黄达 中国人民大学国际关系学院外交学系 中图分类号:F114 文献标识:A 文章编号:1006-7833(2010) 07-125-02 发生与欧洲一体化同步的变革.由此可见,欧洲化为欧洲一 ...
朱文通 河北省社科院历史研究所所长 朱文通 河北有悠久的历史文化,是中华民族的发祥地之一 考古证明,同属于泥河湾层.与泥河湾村遥遥相对的"小长梁和东谷砣文化",距今有100万年大量哺乳动物化石等,这是国内发现最早的旧石器 ...
版权声明:原创作品,如需转载,请与作者联系.否则将追究法律责任. Java 多线程编程总结 一.认识多任务.多进程.单线程.多线程 要认识多线程就要从操作系统的原理说起. 以前古老的DOS 操作系统(V 6.22)是单任务的,还没有线程的概 ...
09级计算机科学与技术专业毕业设计题目指南 说明:1. 每个题目的选择人数最多不能超过2名同学,否则将退回重选.(如题目要求可多 人合作,则以题目要求为准),请各班级同学自行协调解决选题冲突问题. 2.学习委员上报题目请用EXCEL 表格, ...