微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

二元信号量如何实现平等的执行和饥饿?

如何解决二元信号量如何实现平等的执行和饥饿?

我很困惑如何使用两个二进制信号量 Q 和 S 来保证平等执行并在我引用的以下 example 中创造饥饿的可能性。

中间示例中保证平等执行的基本原理是:

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) 它就像控制那个信号量一样好,所以这里的信号是指将控制权交给其他进程

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

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

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

所以饿了

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。