【问题标题】:About deadlock in Linux and Windows关于 Linux 和 Windows 中的死锁
【发布时间】:2017-05-29 12:46:11
【问题描述】:

假设您有两个进程,P1 和 P2。 P1 具有高优先级,P2 具有低优先级。 P1 和 P2 有一个共享的信号量(即,它们都在同一个信号量上执行等待和发布)。进程可以以任意顺序交错(例如,P2 可以在 P1 之前启动)。

简要说明进程在以下情况下是否会死锁:

二。两个进程都作为分时任务在 Linux 系统上运行

三。这两个进程都作为可变任务在 Windows 7 系统上运行

四。这两个进程都作为实时任务在 Windows 7 系统上运行。

我认为 P1 和 P2 只能导致优先级倒置。根据死锁的要求之一(循环等待:有两个或多个进程的循环链,等待其他进程持有的资源),优先级反转不等于死锁。此外,P1 和 P2 只有 1 个信号量,这意味着不会有循环,所以它们永远不会导致死锁。因此,所有的答案都将是否定的。 那是对的吗?如果不是,那答案是什么?

【问题讨论】:

    标签: linux windows operating-system deadlock priority-inversion


    【解决方案1】:

    你是对的,只有一个信号量是不可能出现死锁的。

    只有当 P1 拥有 P2 需要的一些资源并且需要 P2 拥有的资源时,才会发生两个进程的死锁。所以 P1 不能继续,直到 P2 释放资源,P2 不能继续,直到 P1 释放资源。因此,他们都被困在彼此等待中,但不让彼此前进。正如您已经提到的,circular wait condition 不能用一个信号量来实现。

    另外,P1 等待 P2 释放资源并不是优先级倒置。优先级反转发生,当 Px 在 P1 和 P2 之间具有优先级并且 P1 等待 P2 释放资源,而 P2 等待 Px,因为它具有更高的优先级。所以 P1 等待优先级较低的 Px,尽管它不是故意的(没有共享资源或其他任何东西)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 2019-11-17
      相关资源
      最近更新 更多