如前所述,哲学家晚餐问题的指挥家解决方案建议使用一个4号的符号,所有的哲学家都试图在右叉之前得到左叉http://en.wikipedia.org/wiki/Dining_philosophers_problem#Conductor_solution
它还建议哲学家们按照左/右顺序拿起叉子?
为什么哲学家按左/右顺序拿起叉子很重要?
或者都是同样的顺序(我想它们也可以是右/左)?

最佳答案

死锁通常在锁出现顺序问题时发生,例如:

Thread 1: acquire lock1 then lock2
Thread 2: acquire lock2 then lock1

如果T1设法同时获取lock1和t2以获取lock2,则它们都将被阻止,并且您将出现死锁。
通过引入特定顺序,例如:lock1必须始终在lock2之前获取,可以消除问题:
Thread 1: acquire lock1 then lock2
Thread 2: acquire lock1 then lock2

一旦T1获得lock1,T2就无法取得进展,也无法获得lock2,而lock2对T1仍然可用。
先左后右的顺序实现了相同的目标,并简化了指挥的角色。

08-03 13:58