所描述的哲学家晚餐问题的指挥解决方案表明,使用了四个尺寸的四分之一,并且所有哲学家都试图在右叉之前得到左叉。 http://en.wikipedia.org/wiki/Dining_philosophers_problem#Conductor_solution
它还表明哲学家以左/右序列拾取叉子?
为什么重要的是哲学家以左/右序列拾取叉子?
或者所有人都在同一序列中(我猜他们都可以正确/左右)?
答案 0 :(得分:1)
当您的锁具有订单问题时,通常会发生死锁,例如:
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就无法取得进展并获得可用于T1的lock2。
施加左先的然后右的序列实现了相同的目标并简化了导体的作用。
答案 1 :(得分:0)
首先 - 它表示所有哲学家的序列必须是左/右或右/左。
这完全取决于其他微妙的假设。我认为,在问题的“导体解决方案”中,如果我们假设服务员足够聪明,则左/右序列并不重要。如果服务员知道整个表的情况,他可以以“保守”的方式授予叉子,以便不会发生死锁 - 这将是一个集中的解决方案。 固定序列有助于指挥决定是否可以授予前叉,因为哲学家以更可预测的方式行事。