在 Ben Ari 的《并发和分布式编程原理》(第 2 版)第 8.4 章,用通道吃饭的哲学家中,他们提出了一个我认为可能导致死锁的解决方案。
假设哲学家 3 拿了叉子 3。然后哲学家必须拿第四叉子吃饭。但是第四个叉子可能会被第四个哲学家拿走。
作为概括,每个哲学家都可能先拿“他左边”的叉子,导致他们每个人都在等待另一个叉子被释放,这永远不可能发生。
我错过了什么,还是这个解决方案不完整?
在关于信号量的章节中,也发生了类似的事情,但作者提出了一种替代解决方案来缓解死锁情况。例如,可以添加一个限制,让一位哲学家首先在其他人做的另一侧分叉,从而避免死锁。我认为这可能是一个可能的解决方案,但我想在这里与其他人确认。
提前致谢!