【问题标题】:What is the logic behind this deadlock problem answer?这个死锁问题答案背后的逻辑是什么?
【发布时间】:2021-12-31 15:26:04
【问题描述】:

我必须解决这个问题:

两个进程,A 和 B,每个都需要三个记录,1、2 和 3,在一个 数据库。如果 A 按 1、2、3 的顺序要求它们,B 要求它们 同样的顺序,死锁是不可能的。但是,如果 B 要求 它们按 3、2、1 的顺序排列,则可能出现死锁。带三个 资源,有3个!或六种可能的组合,其中每个 进程可以请求它们。所有组合的比例是多少 保证没有死锁?

我在一本书中看到了这个问题的解决方案:

123 无死锁
132 无死锁
213 可能的死锁
231 可能的死锁
312 可能的死锁
321 可能的死锁

由于六个中的四个可能导致僵局,因此有 1/3 的机会 避免陷入僵局和获得 2/3 的机会。

但我不知道这个解决方案背后的逻辑是什么。
有人能解释一下为什么这个解决方案是正确的吗?
我搜索了很多,但没有找到任何东西,而且这个问题的所有答案都没有明确的解释。

【问题讨论】:

    标签: operating-system deadlock


    【解决方案1】:

    当两个线程都必须等待获取另一个线程已经获取的锁(导致两个线程永远等待)时,就会发生死锁。

    如果两个线程都先尝试获取同一个锁,那么只有一个线程可以成功,另一个必须等​​待,等待的线程将在没有任何锁的情况下等待,因此不会发生死锁,因为获取锁的线程1 将能够获取它想要的所有其他锁,并且能够在锁 1 完成时释放它(这允许等待线程继续)。

    例如如果 A 和 B 尝试首先获取锁 1 并且 A 获胜,则 B 在没有持有任何锁的情况下等待,并且 A 可以按照它想要的任何顺序获取任何其他锁,因为 B 没有持有任何锁(然后 A 将释放锁 1 B 可以停止等待)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      相关资源
      最近更新 更多