【问题标题】:Why is the left / right sequence important in conductor solution to philosophers dinner?为什么左/右序列在哲学家晚餐的指挥解决方案中很重要?
【发布时间】:2013-03-28 07:57:06
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: 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】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-11
        • 2017-04-10
        • 1970-01-01
        • 1970-01-01
        • 2015-10-14
        • 2016-03-04
        相关资源
        最近更新 更多