0

在我引用的以下示例中,我对如何使用两个二进制信号量 Q 和 S 来保证平等执行并造成饥饿的可能性感到困惑。

在中间示例中保证平等执行的理由是:

The second guarantees equal shares since the process that holds both Q and S will give up S to the other process before it releases Q and goes back to the top of the loop.

我真的不明白“放弃 S 到另一个过程”是什么意思。S不只是一个要递增和递减的值吗?P1 将在 S 发出信号后运行的想法来自哪里?

第三种情况的解释对我来说也没有任何意义,他说:

The third is subject to starvation, since it's possible for one process to run slightly faster than the other and monopolize the semaphores.

如果在这种情况下一个进程可以独占信号量,那么在平等执行的情况下不能说同样的话吗?从这个意义上说,是什么让这些不同?

4

1 回答 1

0

嘿,所以不同之处在于信号案例的顺序

在同等工作的情况下,我们增加了 s 的值,基本上我们放弃了 S 的控制权。这里这是一个共享变量,一旦进程执行 wait(S) 它就如同控制那个信号量一样好,所以这里的信号是指放弃控制权给其他进程

现在谈到饥饿问题,记住一台电脑中有数百个进程。所以如果我们假设有一个带有以下代码的进程 P3

p3 while (1){ wait(Q) //临界区信号(Q)

因为 P1 首先在这里放弃 Q ,如果 p3 在执行时略快于 p2 ,它将获得 Q 。现在在另一个上下文切换说 p2 获得控制权之后,它可以有效地获得 S,因为它是空闲的,并且没有进程比它更快它饿死,因为它无法获得 Q,因为 p3 拥有它

因此它饿死了

于 2021-06-22T10:34:54.093 回答