问题描述:

有五个哲学家,他们的生活方式是交替地进行思考和进餐,哲学家们共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五支筷子,平时哲学家进行思考,饥饿时便试图取其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐,该哲学家进餐完毕后,放下左右两只筷子又继续思考。

约束条件

(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);

【操作系统】进程:哲学家进餐问题相关推荐

  1. 【操作系统】进程-哲学家进餐问题

    王道考研学习笔记 问题分析 一张圆桌上坐着5名哲学家,每两个哲学家之间的桌上摆一根筷子,桌子的中间是一碗米饭.哲学 家们倾注毕生的精力用于思考和进餐,哲学家在思考时,并不影响他人.只有当哲学家饥饿时 ...

  2. 【操作系统】哲学家进餐问题

    问题描述 一张圆桌上坐着5名哲学家,每两个哲学家之间的桌上摆着一根筷子,桌子的中间是一碗米饭,哲学家们倾注毕生精力用于思考和进餐,哲学家在思考时,并不影响他人.只有当哲学家饥饿时,才试图拿起左.右两根 ...

  3. 操作系统:哲学家进餐问题

    哲学家进餐问题 五个哲学家围着一张圆桌,每个哲学家面前放着食物.哲学家的生活有两种交替活动:吃饭以及思考.当一个哲学家吃饭时,需要先拿起自己左右两边的两根筷子,并且一次只能拿起一根筷子. 下面是一种错 ...

  4. 【操作系统】“哲学家进餐”问题

    "哲学家进餐"问题 有五个哲学家,他们的生活方式是交替地进行思考和进餐.他们共用一张圆桌,分别坐在五张椅子上. 在圆桌上有五个碗和五支筷子,平时一个哲学家进行思考,饥饿时便试图取用 ...

  5. 操作系统(四) | 经典进程的同步问题(生产者--消费者问题、哲学家进餐问题、读者--写者问题)

    文章目录 生产者--消费者问题 分析 实现 哲学家进餐问题 方法一:最多4人同时拿左筷子,最终保证一人能进餐 方法二:同时给左右筷子 解法1:AND信号量 解法2:信号量保护机制 方法三:让奇数先左后 ...

  6. 【操作系统实验】Linux环境下用进程实现哲学家进餐问题——C语言完整代码+详细实验报告

    [注意]代码在文末,以下为详细实验报告 [实验目的]   以哲学家进餐问题为例,学习并熟悉Linux下进程通信.同步机制的具体实现方法,主要是了解并掌握信号量机制和避免死锁的使用方法,使得不会出现哲学 ...

  7. 操作系统之进程管理:15、哲学家进餐问题

    15.哲学家进餐问题 问题描述 解题思路 解决死锁的策略 方案一与方案二 方案三 注 问题描述 解题思路 1.因为需要左手和右手俩只筷子,所以可以直接拿哪只就对哪只上锁 问题:这样的话当每个人都拿走左 ...

  8. 【操作系统】-- PV原语(哲学家进餐问题)

    微信搜索:编程笔记本 微信搜索:编程笔记本 微信搜索:编程笔记本 点击上方蓝字关注我,我们一起学编程 欢迎小伙伴们分享.转载.私信.赞赏 小伙伴儿们看完以后可不可以帮我点亮一下在看呀~ 信号量与进程同 ...

  9. 2.7操作系统(读者—写者问题 哲学家进餐问题 管程 )

    目录 1.读者-写者问题 2.哲学家进餐问题 实现 3.管程 1.为什么要引入管程? ​2.管程的定义和基本特征 3.扩展1:用管程解决生产者消费者问题 4.扩展2:Java中类似于管程的机制  个人 ...

最新文章

  1. ie下面出现Notice: Undefined index: HTTP_REFERER 的解决办法
  2. python编程 从入门到实践豆瓣-三周刷完《Python编程从入门到实践》的感受
  3. 分治法之循环赛日程表
  4. springboot启动报错:Unregistering JMX-exposed beans on shutdown
  5. 注解@resource的作用_Bean基于Annotation(注解)的装配方式
  6. wxpython富文本_去除富文本编辑器中的标签
  7. linux 基础学习之目录与文件处理命令
  8. 87-Spark推测执行spark.speculation
  9. 从开发者到讲师的心路历程与必知必会 | 原力计划
  10. 转-squid介绍及其简单配置
  11. python怎样终止程序_python终止程序
  12. C语言编程QQ管理系统,顺序表- QQ群名片信息管理系统设计(C语言实现)
  13. Java-面向对象编程-三大特性之多态
  14. Charles做弱网测试
  15. 如何解决存在的1px问题?
  16. 开发集成云信IM小程序聊天室流程
  17. 相律公式表达式_第六章 相平衡主要公式及其适用条件
  18. PaaS 平台学习(开源力量OSF)构建千万级大规模、高可靠PaaS平台的技术挑战 学习笔记
  19. 时间序列预测之移动平均法(MA)
  20. C#NPOI操作Excel

热门文章

  1. 企业邮箱如何设置Outlook pop3、smtp、imap协议?
  2. NB-IOT相关技术
  3. Unity疑难杂症#
  4. 红星美凯龙寻找「反弹线」
  5. 18135usm_更快更安静 佳能18-135mm USM镜头解析
  6. 好大学在线C语言程序,C/C++程序设计-中国大学mooc-题库零氪
  7. MySQL8.0远程连接和用户授权相关设置
  8. 100套java课设源码参考/毕设源码代码参考
  9. AUTOMATIC1111/stable-diffusion-webui安装教程
  10. python中属性赋值查找_关于python:在dataframe列中查找字典的值并进行修改