当前位置: 首页 > 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.hskmm.com/?act=detail&tid=20908

相关文章:

  • 16.1 总体主成分分析
  • 黄金分割比
  • 借助Aspose.Email,使用 Python 读取 Outlook MSG 文件
  • 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.B)- FlexSPI NOR连接方式大全(RT1180)
  • 文件同步工具深度测评(2025版):同步盘夺冠
  • Oracle故障处理:数据库启动时遇到ORA-01578错误
  • 【ACM出版|连续三届EI检索】第四届人工智能与智能信息处理国际学术会议(AIIIP 2025)
  • 【2025-09-28】平凡家庭
  • 实用指南:梦回童年,将JSNES 游戏模拟器移植到 HarmonyOS 移植指南
  • 单键触控感应芯片 电容是触控IC VKD233HS -永嘉微VINKA 原厂
  • 微算法科技(NASDAQ: MLGO)研发基于 DPoS 框架的 DL-DPoS(深度链接委托权益证明)机制,增强区块链的共识算法
  • JMM内存模型
  • 读者-写者问题
  • 实现邮件发送
  • AGC073C 赛后补题记录
  • LuatOS赋能Air780EPM:FTP通信开发教程正式上线!
  • DM40万用表为何全网爆火?!它有哪些与众不同?DM40万用表比肩千元级表,让您轻松实现专业级测量自由!
  • 树形dp [POI 2013] LUK-Triumphal arch
  • 【论术】t-design tree组件判断点击了角标还是label
  • leetCode刷题记录1
  • k8s下部署kuboard
  • ACL 第一周模拟赛题解
  • 万象EXCEL开发(三)格式解读calcChain.xml——东方仙盟练气期 - 指南
  • 302、寄门人
  • 达梦数据库用户开启限制白名单导致自身无法登录
  • 【转发】Nginx配置https
  • 本地文件多人多端同步工具:10款高性价比选择
  • 打破AI孤岛:CIO集成实战指南
  • 密码学学习记录(四)
  • Sharding-Proxy、ShardingSphere 和 Sharding-JDBC区别