哲学家进餐问题操作系统PPT格式课件下载.ppt
- 文档编号:14645342
- 上传时间:2022-10-23
- 格式:PPT
- 页数:13
- 大小:163.50KB
哲学家进餐问题操作系统PPT格式课件下载.ppt
《哲学家进餐问题操作系统PPT格式课件下载.ppt》由会员分享,可在线阅读,更多相关《哲学家进餐问题操作系统PPT格式课件下载.ppt(13页珍藏版)》请在冰豆网上搜索。
,怎样才能保证哲学家不被饿死呢?
摘要:
解决“哲学家进餐”问题首先要找出对应的控制关系,设定相应的控制信号量。
避免死锁也是解决该类问题的关键。
关键词:
进程同步;
信号量;
临界资源;
临界区;
死锁,算法A,voidphilosopher(inti)/*i:
哲学家编号,从0到4*/while(TRUE)think();
/*哲学家正在思考*/take_fork(i);
/*取左侧的筷子*/take_fork(i+1)%N);
/*取右侧筷子;
为取模运算*/eat();
/*吃饭*/put_fork(i);
/*把左侧筷子放回桌子*/put_fork(i+1)%N);
/*把右侧筷子放回桌子*/,算法分析:
当出现以下情形,在某一个瞬间,所有的哲学家都同时启动这个算法,拿起左侧的筷子,而看到右侧筷子不可用,又都放下左侧筷子,等一会儿,又同时拿起左侧筷子如此这样永远重复下去。
对于这种情况,所有的哲学家都吃不上饭。
算法改善:
至多只允许四个哲学家同时进餐,以保证至少有一个哲学家能够进餐,最终总会释放出他所使用过的两支筷子,从而可使更多的哲学家进餐。
改进后的算法A,semaphorefork5=1,1,1,1,1;
semaphoreroom=4;
voidphilosopher(inti)while(true)think();
wait(room);
/请求进入房间进餐wait(forki);
/请求左手边的筷子wait(fork(i+1)%5);
/请求右手边的筷子eat();
signal(fork(i+1)%5);
/释放右手边的筷子signal(forki);
/释放左手边的筷子signal(room);
/退出房间释放信号量room,算法B思想,规定奇数号的哲学家先拿起他左边的筷子,然后再去拿他右边的筷子;
而偶数号的哲学家则相反.按此规定,将是1,2号哲学家竞争1号筷子,3,4号哲学家竞争3号筷子.即五个哲学家都竞争奇数号筷子,获得后,再去竞争偶数号筷子,最后总会有一个哲学家能获得两支筷子而进餐。
而申请不到的哲学家进入阻塞等待队列,根据FIFO原则,则先申请的哲学家会较先可以吃饭,因此不会出现饿死的哲学家。
semaphorefork5=1,1,1,1,1;
if(i%2=0)/偶数哲学家,先右后左。
wait(forki+1mod5);
wait(forki);
eat();
signal(forki+1mod5);
signal(forki);
Else/奇数哲学家,先左后右。
综上所述,解决这一类问题的关键是找出对应的控制关系,设定相应的控制信号量。
另外,产生死锁是在用信号量进行流程控制过程中常会遇到的一个问题,因此如何避免死锁就是解决该类问题的关键。
Thankyou!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 哲学家 进餐 问题 操作系统