为什么左/右序列在导体解决方案中对哲学家晚餐很重要?

时间:2013-03-28 07:57:06

标签: multithreading algorithm deadlock semaphore dining-philosopher

所描述的哲学家晚餐问题的指挥解决方案表明,使用了四个尺寸的四分之一,并且所有哲学家都试图在右叉之前得到左叉。 http://en.wikipedia.org/wiki/Dining_philosophers_problem#Conductor_solution

它还表明哲学家以左/右序列拾取叉子?

为什么重要的是哲学家以左/右序列拾取叉子?

或者所有人都在同一序列中(我猜他们都可以正确/左右)?

2 个答案:

答案 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)

首先 - 它表示所有哲学家的序列必须是左/右或右/左。

这完全取决于其他微妙的假设。我认为,在问题的“导体解决方案”中,如果我们假设服务员足够聪明,则左/右序列并不重要。如果服务员知道整个表的情况,他可以以“保守”的方式授予叉子,以便不会发生死锁 - 这将是一个集中的解决方案。 固定序列有助于指挥决定是否可以授予前叉,因为哲学家以更可预测的方式行事。