哲学家用餐问题

哲学家用餐问题,5位哲学家坐在圆桌旁,每对哲学家之间只有一根筷子。如果一个哲学家可以拿起他旁边的两根筷子,他就可以吃东西。一根筷子可以由其相邻的任何一个哲学家拿起,但不能同时被两个哲学家拿起。

 

 

如果遵循一个简单的规则,就可以避免死锁:让所有线程以相同的顺序声明并释放其锁。这样,您永远不会陷入可能发生死锁的情况。

甚至就餐哲学家问题也可以视为违反此规则,因为它使用左右勺子的相对概念,这导致使用不同勺子分配顺序的线程不同。如果勺子的编号是唯一的,而所有的哲学家都试图首先获得编号最小的勺子,那么死锁将是不可能的。

我认为,预防胜于治疗。

这是我喜欢遵循的确保线程正常工作的两个准则之一。另一个是确保每个线程对自己的执行全权负责,因为它是唯一一个在任何时间点都知道自己在做什么的线程。

因此,这意味着没有Thread.stop调用,请使用全局标志(或消息队列或类似的东西)告诉另一个线程您要采取的措施。然后让该线程执行实际工作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值