【问题标题】:How do binary semaphores achieve equal execution and starvation?二进制信号量如何实现平等的执行和饥饿?
【发布时间】:2021-06-09 02:48:03
【问题描述】:

在我引用的example 中,我对如何使用两个二进制信号量 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.

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

【问题讨论】:

  • '我很困惑'....看了这些例子后,我也是。'wait(p);doWork;signal(q):' and 'wait(q);doWork;信号(p):',我可以理解,在线程周围交换单个单元。为什么需要成对的等待/信号我不明白。

标签: operating-system computer-science starvation binary-semaphore


【解决方案1】:

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

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

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

p3 而(1){ 等待(Q) //临界区 信号(Q)

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

饿死了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    相关资源
    最近更新 更多