使用 Ben Ari 频道的哲学家用餐陷入僵局?

Deadlock in dining philosophers with channels from Ben Ari?

在 Ben Ari 的并发和分布式编程原理(第 2 版),第 8.4 章,带通道的用餐哲学家,他们提出了一个我认为可能导致死锁的解决方案。 假设一个哲学家 3 拿了第 3 把叉子。然后哲学家必须拿第 4 把叉子吃饭。但是第4个叉子可能会被第4个哲学家拿走。

一般来说,每个哲学家可能会先拿叉子'on his left',导致他们每个人都在等待另一个叉子被释放,这种情况永远不会发生。

我是不是遗漏了什么,或者这个解决方案不完整?

在关于信号量的章节中,发生了类似的事情,但作者提出了一种替代解决方案来缓解死锁情况。例如,可以添加一个限制,这样一个哲学家首先拿叉子在其他哲学家的对面,从而避免死锁。我认为这可能是一个可能的解决方案,但我想在这里与其他人确认。

提前致谢!

Am I missing something, or is this solution incomplete?

我绝对没有遗漏任何东西:我与在我大学教授本书的教授确认这个解决方案确实会导致死锁。