Note
只分析难点,不阐述细节
Conclusion
每个人最终都能拿到左边筷子
假如A坐在B左边。
A:
1、拿左边
2、拿右边
3、吃饭
4、放回右边
5、放回左边
B:
1、拿左边
2、拿右边
3、吃饭
4、放回右边
5、放回左边
代码决定了每个哲学家拿筷子的顺序都是一致的。
B拿左边只有在A拿了右边的情况下才会失败,但你看看A拿了右边说明什么?说明A吃饭了啊,吃完饭会放回去的。所以每个人都最终能拿到左边筷子。
什么时候会出现死锁
只有每个人都拿不到右边筷子才会死锁。
这个用反证法证明,如果有一个人拿到了右边筷子说明已经拿到左边了「因为先拿左再拿右,你拿到右边筷子了还敢跟我说你没有左边筷子?」。
那说明他已经两根都有了可以吃饭,吃完他就会释放左右筷子,所以结论就是某个路人哲学家吃完饭后会释放自己拿到的左边筷子,左边人就可以用上自己右边的被路人哲学家占用的筷子了「根据上面的每个人都有左边筷子结论可以知道,你想吃饭但吃不上的阻碍不是左边筷子,而是右边筷子」所以左边人就能吃上饭,所以我能吃上 可推 我左边能吃上,根据归纳法可知道最终所有人都能吃上。