2

所描述的哲学家晚餐问题的指挥解决方案建议使用大小为 4 的信号量,并且所有哲学家都尝试在右叉之前先获得左叉。http://en.wikipedia.org/wiki/Dining_philosophers_problem#Conductor_solution

它还表明哲学家按左/右顺序拿起叉子?

为什么哲学家按左/右顺序拿起叉子很重要?

还是都在同一个序列中(我猜它们也可以是右/左)?

4

2 回答 2

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 就无法取得进展并获得 lock2,而 lock2 仍然可供 T1 使用。

强加一个先左后右的顺序可以实现相同的目标并简化指挥者的角色。

于 2013-03-28T09:45:05.987 回答
0

首先-它说对于所有哲学家来说,序列必须是左/右或右/左。

这一切都取决于额外的微妙假设。我认为,如果我们假设服务员足够聪明,那么在问题的“指挥解决方案”中,左/右顺序并不重要。如果服务员知道整个餐桌的情况,他可以以“保守”的方式授予分叉,这样就不会发生死锁——这将是一个集中的解决方案。固定顺序有助于指挥者决定是否可以授予分叉,因为哲学家以更可预测的方式行事。

于 2013-03-28T08:45:48.570 回答