2

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

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

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

哲学家按什么顺序返回叉子有关系吗?

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

现在信号量将回到 3。

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

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

我错过了一些东西

帮助?

4

1 回答 1

1

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

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

于 2013-03-28T00:33:50.367 回答