【问题标题】:Conductor solution to philosophers dinner哲学家晚餐的指挥解决方案
【发布时间】:2013-03-28 00:16:16
【问题描述】:

所描述的哲学家晚餐问题的指挥解决方案建议使用大小为 4 的信号量,并且所有哲学家都尝试在右叉之前先获得左叉。 http://en.wikipedia.org/wiki/Dining_philosophers_problem#Conductor_solution

信号量是否应该用于访问左分叉的每个人和访问右分叉的每个人?

如果一个哲学家可以在指定时间内得到左叉但没有得到右叉,该怎么办?他们应该把左叉还给吗?

哲学家返回叉子的顺序是否重要?

当然,这种解决方案仍然会导致饥饿。例如,wiki 说 A 和 C 都有两个分叉。这意味着信号量将不再对任何人说分叉并挂在第五个。 D 和 E 之间的叉子必须留在桌子上。然后说 A 返回他的右叉。

现在信号量将回到 3。

D 可以再次尝试左叉,然后意识到他无法正确。 B只能离开。又没用。

A 可以尝试再次选择右叉,因为他已经选择了左叉。这意味着我们绕着圈子转。

我错过了什么

帮助?

【问题讨论】:

  • 信号量应该在拿起两个分叉之前使用,这就是重点。
  • @Bergi 然后增加了两个?所以它永远不能加一?

标签: algorithm concurrency dining-philosopher


【解决方案1】:

我相信哲学家总是“同时”返回两个叉子。通过要求哲学家先获得左叉然后获得右叉,这个问题得到了进一步简化。锁获取顺序确实有助于简化死锁问题。遵循导体方案将保证不可能出现死锁。

这里的额外技巧是服务员要求 5 个哲学家中只有 4 个可以同时拿着叉子(所以它更像是一个计数信号量,计数哲学家而不是叉子)。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 2017-04-10
  • 1970-01-01
  • 2016-03-04
  • 2011-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多