当前位置: 首页 > news >正文

哲学家进餐问题

一张圆桌上坐着5名哲学家,每两个哲学家之间的桌上摆一根筷子,桌子的中间是一碗米饭。哲学家们倾注毕生的精力用于思考和进餐,哲学家在思考时,并不影响他人。只有当哲学家饥饿时,才试图拿起左、右两根筷子(一根一根地拿起)。如果筷子已在他人手上,则需等待。饥饿的哲学家只有同时拿起两根筷子才可以开始进餐,当进餐完毕后,放下筷子继续思考。

我们给每根筷子都从0-4标号,给每个哲学家都0-4标号

每个哲学家左侧的筷子编号=哲学家编号

每个哲学家右侧的筷子编号=(哲学家编号+1)%5

semaphore chopstick[5]={1,1,1,1,1}
Processi(){while(true){P(chopstick[i]);//锁上左边的筷子P(chopstick[(i+1)%5]);//锁上右边的筷子吃饭;V(chopstick[i]);//锁上左边的筷子V(chopstick[(i+1)%5]);//锁上右边的筷子}
}

这时候就会出现问题,每个哲学家如果同时肚子饿,他们都会同时拿起左边的筷子,但这个时候发现右边的筷子已经被人占用了,他们会循环等待右边的人放下筷子(阻塞)发生了死锁

上面的解决方法显然不合理

因此要保证拿起两只筷子的过程一气呵成

semaphore chopstick[5]={1,1,1,1,1};
semaphore mutex=1;
Processi(){while(true){P(mutex);P(chopstick[i]);//锁上左边的筷子P(chopstick[(i+1)%5]);//锁上右边的筷子V(mutex);吃饭;V(chopstick[i]);//锁上左边的筷子V(chopstick[(i+1)%5]);//锁上右边的筷子}
}

虽然解决了这个问题,但是依然还是可能会导致有人在两个筷子都在面前的时候无法吃上饭

http://www.sczhlp.com/news/148074/

相关文章:

  • 16.1 总体主成分分析
  • 深圳网站建设的价格引擎优化seo
  • 电脑报价网站免费同城信息发布平台
  • 简单个人网页制作成品长沙seo优化价格
  • 自己的卡盟网站怎么做分站软文推广300字
  • 做网站找哪个公司建设企业网站官网企业网银
  • 自己做的网站显示不安全怎么回事知乎推广渠道
  • 黄金分割比
  • 借助Aspose.Email,使用 Python 读取 Outlook MSG 文件
  • 调兵山网站我要建个人网站
  • 做网站包含的技术广州专业网站建设报价
  • 网站备案核验单怎么填毕设什么类型网站容易做
  • 智能建站实验报告wordpress 功能菜单
  • 网站建设与管理广东药学院姓氏网站建设的意见和建议
  • 平山县建设局网站推荐做网站的公司
  • 展厅设计公司网站桐庐住房和城乡建设局网站
  • 上海企业自助建站花店网站建设需求
  • 辽阳哪里做网站公司没有销售网站怎么做业务
  • 深圳网站开发奇辰科技做网站的贴吧
  • Oracle故障处理:数据库启动时遇到ORA-01578错误
  • 【ACM出版|连续三届EI检索】第四届人工智能与智能信息处理国际学术会议(AIIIP 2025)
  • 绿色在线网站模板下载网站定制哪个好
  • 德州万企互联网站制作中国建筑中心官网
  • 提高网站百度权重软件工程师薪资待遇
  • 网站建设招聘条件怎么看一个网站是什么时候做的
  • 怎么设置网站支付功能wordpress读书插件
  • 全国好的深圳网站设计友情链接交换条件
  • 用自己照片做衣服_杯子的是哪个网站经典重庆论坛新闻论坛怎么了
  • 网站资源库建设报价网站自做书本
  • 网站图片做cdn叮当网站做app