【发布时间】:2021-05-04 11:35:56
【问题描述】:
在 Ben Ari 的《并发和分布式编程原理》(第 2 版)第 8.4 章,用通道吃饭的哲学家中,他们提出了一个我认为可能导致死锁的解决方案。 假设哲学家 3 拿了叉子 3。然后哲学家必须拿第四叉子吃饭。但是第四个叉子可能会被第四个哲学家拿走。
一般来说,每个哲学家都可能先拿“他左边”的叉子,结果他们每个人都在等待另一个叉子被释放,这永远不可能发生。
是我遗漏了什么,还是这个解决方案不完整?
在关于信号量的章节中,也发生了类似的事情,但作者提出了一种替代解决方案来缓解死锁情况。例如,可以添加一个限制,以便一位哲学家首先在其他人的另一侧分叉,从而避免死锁。我认为这可能是一个可能的解决方案,但我想在这里与其他人确认。
提前致谢!
【问题讨论】:
标签: concurrency dining-philosopher