【发布时间】: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