0

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

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

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

iii. 这两个进程在 Windows 7 系统上作为可变任务运行

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

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

4

1 回答 1

0

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

只有当 P1 拥有 P2 需要的一些资源并且需要 P2 拥有的资源时,两个进程才会发生死锁。所以 P1 在 P2 释放资源之前不能继续,而 P2 在 P1 释放资源之前不能继续。因此,他们都被困在彼此等待中,但不让彼此前进。正如您已经提到的,一个信号量无法满足循环等待条件。

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

于 2017-01-24T18:26:46.550 回答