二进制信号量如何实现相等的执行和饥饿?



我很困惑,在我引用的下面的例子中,如何使用两个二进制信号量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不就是一个可以递增和递减的值吗?在S发出信号后P1会跑的想法是从哪里来的?

对第三个案例的解释对我来说也没有意义,说:

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

如果在这种情况下,一个进程可以独占信号量,那么在相同执行的情况下,是不是也可以这样说呢?从这个意义上说,它们有什么不同?

在等功的情况下我们增加s的值,基本上我们放弃了对s的控制。这里这是一个共享变量,一旦一个进程执行wait(S),它就相当于控制了那个信号量,所以signal在这里指的是放弃对其他进程的控制

现在说到饥饿问题,请记住在一台PC中有数百个进程。因此,如果我们假设有一个进程P3,其代码如下

p3而(1){等待(问)//关键部分信号(Q)

因为P1首先放弃了Q如果p3的释放速度比p2快一点它就会得到Q。现在,在另一个上下文切换之后,假设p2获得了控制权它可以有效地得到S,因为它是自由的,没有进程比它更快它饿死了,因为它不能得到Q因为p3有它

因此被饿死

最新更新