【问题标题】:Why is the left / right sequence important in conductor solution to philosophers dinner?为什么左/右序列在哲学家晚餐的指挥解决方案中很重要?
【发布时间】:2013-03-28 07:57:06
【问题描述】:
【问题讨论】:
标签:
multithreading
algorithm
deadlock
semaphore
dining-philosopher
【解决方案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 使用。
强加一个先左后右的顺序可以达到同样的目的,并简化了指挥者的角色。
【解决方案2】:
首先 - 它表示所有哲学家的序列必须是左/右或右/左。
这一切都取决于额外的微妙假设。我认为,如果我们假设服务员足够聪明,那么在问题的“指挥解决方案”中,左/右顺序并不重要。如果服务员知道整个餐桌的情况,他可以以“保守”的方式授予分叉,这样就不会发生死锁——这将是一个集中的解决方案。
固定顺序有助于指挥者决定是否可以授予分叉,因为哲学家以更可预测的方式行事。