【操作系统】进程:哲学家进餐问题
问题描述:
有五个哲学家,他们的生活方式是交替地进行思考和进餐,哲学家们共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五支筷子,平时哲学家进行思考,饥饿时便试图取其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐,该哲学家进餐完毕后,放下左右两只筷子又继续思考。
约束条件
(1)只有拿到两只筷子时,哲学家才能吃饭。
(2)如果筷子已被别人拿走,则必须等别人吃完之后才能拿到筷子。
(3)任一哲学家在自己未拿到两只筷子吃完饭前,不会放下手中已经拿到的筷子。
记录型信号量解决哲学家进餐问题(可能出现死锁):
假如五位哲学家同时拿起左手的筷子时,就会使五个信号量chopstick为0;当他们试图拿起右手边的筷子时,都将因无筷子陷入等待。
解决方案:
(1)最多允许四个人同时去拿左手的筷子,最终能保证至少有一个哲学家能够进餐,并在用完时释放他的筷子,从而使更多的哲学家能够拿筷子。
(2)仅当哲学家左右两只筷子均可用时,才允许他拿起筷子进餐。
AND型信号量
semaphore chopstick[5]={1,1,1,1,1};
do{...//think...Swait(chopstick[i+1]%5,chopstick[i]);...//eat...signal(chopstick[i+1]%5,chopstick[i]);
}while(true);
(3)规定奇数号哲学家先拿左边的筷子,偶数号哲学家相反。五位哲学家都先竞争奇数号筷子,获得后,再去竞争偶数号筷子,最后总会有一位哲学家能获得一双筷子。
semaphore chopstick[5]={1,1,1,1,1};
do{//thinkingif(i%2==1){wait(chopstick[i]);wait(chopstick[(i+1)%5]);}else{wait(chopstick[(i+1)%5];wait(chopstick[i]);}//eatingsignal(chopstick[i]);signal(chopstick[(i+1)%5]);
}while(true);
【操作系统】进程:哲学家进餐问题相关推荐
- 【操作系统】进程-哲学家进餐问题
王道考研学习笔记 问题分析 一张圆桌上坐着5名哲学家,每两个哲学家之间的桌上摆一根筷子,桌子的中间是一碗米饭.哲学 家们倾注毕生的精力用于思考和进餐,哲学家在思考时,并不影响他人.只有当哲学家饥饿时 ...
- 【操作系统】哲学家进餐问题
问题描述 一张圆桌上坐着5名哲学家,每两个哲学家之间的桌上摆着一根筷子,桌子的中间是一碗米饭,哲学家们倾注毕生精力用于思考和进餐,哲学家在思考时,并不影响他人.只有当哲学家饥饿时,才试图拿起左.右两根 ...
- 操作系统:哲学家进餐问题
哲学家进餐问题 五个哲学家围着一张圆桌,每个哲学家面前放着食物.哲学家的生活有两种交替活动:吃饭以及思考.当一个哲学家吃饭时,需要先拿起自己左右两边的两根筷子,并且一次只能拿起一根筷子. 下面是一种错 ...
- 【操作系统】“哲学家进餐”问题
"哲学家进餐"问题 有五个哲学家,他们的生活方式是交替地进行思考和进餐.他们共用一张圆桌,分别坐在五张椅子上. 在圆桌上有五个碗和五支筷子,平时一个哲学家进行思考,饥饿时便试图取用 ...
- 操作系统(四) | 经典进程的同步问题(生产者--消费者问题、哲学家进餐问题、读者--写者问题)
文章目录 生产者--消费者问题 分析 实现 哲学家进餐问题 方法一:最多4人同时拿左筷子,最终保证一人能进餐 方法二:同时给左右筷子 解法1:AND信号量 解法2:信号量保护机制 方法三:让奇数先左后 ...
- 【操作系统实验】Linux环境下用进程实现哲学家进餐问题——C语言完整代码+详细实验报告
[注意]代码在文末,以下为详细实验报告 [实验目的] 以哲学家进餐问题为例,学习并熟悉Linux下进程通信.同步机制的具体实现方法,主要是了解并掌握信号量机制和避免死锁的使用方法,使得不会出现哲学 ...
- 操作系统之进程管理:15、哲学家进餐问题
15.哲学家进餐问题 问题描述 解题思路 解决死锁的策略 方案一与方案二 方案三 注 问题描述 解题思路 1.因为需要左手和右手俩只筷子,所以可以直接拿哪只就对哪只上锁 问题:这样的话当每个人都拿走左 ...
- 【操作系统】-- PV原语(哲学家进餐问题)
微信搜索:编程笔记本 微信搜索:编程笔记本 微信搜索:编程笔记本 点击上方蓝字关注我,我们一起学编程 欢迎小伙伴们分享.转载.私信.赞赏 小伙伴儿们看完以后可不可以帮我点亮一下在看呀~ 信号量与进程同 ...
- 2.7操作系统(读者—写者问题 哲学家进餐问题 管程 )
目录 1.读者-写者问题 2.哲学家进餐问题 实现 3.管程 1.为什么要引入管程? 2.管程的定义和基本特征 3.扩展1:用管程解决生产者消费者问题 4.扩展2:Java中类似于管程的机制 个人 ...
最新文章
- ie下面出现Notice: Undefined index: HTTP_REFERER 的解决办法
- python编程 从入门到实践豆瓣-三周刷完《Python编程从入门到实践》的感受
- 分治法之循环赛日程表
- springboot启动报错:Unregistering JMX-exposed beans on shutdown
- 注解@resource的作用_Bean基于Annotation(注解)的装配方式
- wxpython富文本_去除富文本编辑器中的标签
- linux 基础学习之目录与文件处理命令
- 87-Spark推测执行spark.speculation
- 从开发者到讲师的心路历程与必知必会 | 原力计划
- 转-squid介绍及其简单配置
- python怎样终止程序_python终止程序
- C语言编程QQ管理系统,顺序表- QQ群名片信息管理系统设计(C语言实现)
- Java-面向对象编程-三大特性之多态
- Charles做弱网测试
- 如何解决存在的1px问题?
- 开发集成云信IM小程序聊天室流程
- 相律公式表达式_第六章 相平衡主要公式及其适用条件
- PaaS 平台学习(开源力量OSF)构建千万级大规模、高可靠PaaS平台的技术挑战 学习笔记
- 时间序列预测之移动平均法(MA)
- C#NPOI操作Excel
热门文章
- 企业邮箱如何设置Outlook pop3、smtp、imap协议?
- NB-IOT相关技术
- Unity疑难杂症#
- 红星美凯龙寻找「反弹线」
- 18135usm_更快更安静 佳能18-135mm USM镜头解析
- 好大学在线C语言程序,C/C++程序设计-中国大学mooc-题库零氪
- MySQL8.0远程连接和用户授权相关设置
- 100套java课设源码参考/毕设源码代码参考
- AUTOMATIC1111/stable-diffusion-webui安装教程
- python中属性赋值查找_关于python:在dataframe列中查找字典的值并进行修改