gpt4 book ai didi

multithreading - 使用信号量不会唤醒其他进程

转载 作者:行者123 更新时间:2023-12-03 13:08:40 25 4
gpt4 key购买 nike

以下代码来自Wiki

wait(Semaphore s){
s=s-1;
if (s<0) {
// add process to queue
block();
}
}

signal(Semaphore s){
s=s+1;
if (s>=0) {
// remove process p from queue
wakeup(p);
}
}

如果容量为1时我有两个以上的进程怎么办( s初始化为1)?例如,进程1进入关键 session 。然后,进程2和3调用 waits现在等于-2。然后,进程1完成并调用 signals变为-1。由于不满足 s >= 0的要求,因此永远不会唤醒进程2和3。这是什么问题

最佳答案

看一眼

https://en.wikipedia.org/wiki/Semaphore_(programming)

而不是Wiki书籍链接。

在Wiki文章和Windows中,信号量为零或具有正计数,并且可以使用无符号整数进行计数来实现。信号量的等待功能不会减小信号量(如果已经为零),而是等待。如果多个进程或线程正在等待计数== 0的信号量,则如果信号量增加1,则只有一个进程或线程会被唤醒(信号量递减为零),并且它正在运行取决于将要唤醒的系统。

链接到Windows信号量说明,并带有指向信号量功能的其他链接。

https://msdn.microsoft.com/en-us/library/windows/desktop/ms685129(v=vs.85).aspx

关于multithreading - 使用信号量不会唤醒其他进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47128092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com