Algorithm 哲学家晚餐的解决方案

Algorithm 哲学家晚餐的解决方案,algorithm,concurrency,dining-philosopher,Algorithm,Concurrency,Dining Philosopher,所描述的哲学家晚餐问题的导体解决方案建议使用大小为4的符号,并且所有哲学家都试图先得到左叉,再得到右叉。 信号量应该用于访问左fork和访问右fork的每个人吗 如果一个哲学家能在规定的时间内得到左叉子,但没有得到右叉子,他该怎么办?他们应该把左叉子还给我吗 哲学家返回叉子的顺序重要吗 当然,这种解决方案仍然会导致饥饿。例如,维基上说A和C都有两个分叉。这意味着信号灯将对任何人说不再有叉子,并挂在第五个叉子上。 D和E之间的叉子必须放在桌子上。然后说A返回他的右叉子 现在信号灯将在3点返回 D

所描述的哲学家晚餐问题的导体解决方案建议使用大小为4的符号,并且所有哲学家都试图先得到左叉,再得到右叉。

信号量应该用于访问左fork和访问右fork的每个人吗

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

哲学家返回叉子的顺序重要吗

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

现在信号灯将在3点返回

D可以再次尝试左叉子,然后意识到他不能右转。 B只能走左边。同样没有用

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

我错过了一些东西


帮助?

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


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

在拿起两个叉子之前应该使用信号量,这就是重点。@Bergi,然后增加两个?所以它永远不能增加1?是的,就是这样。谢谢这里的更多信息。。。