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

Other processes won't be woken up using semaphore

以下代码来自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),我有2个以上的进程怎么办?例如,进程 1 进入关键会话。然后进程 2 和进程 3 调用 waits 现在等于 -2。然后进程 1 完成并调用 signals 变为 -1。因为 s >= 0 不会被满足,进程 2 和 3 永远不会被唤醒。这里有什么问题?

看看

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

相对于 wiki 书籍 link。

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

Link 到 Windows 信号量描述以及额外的 links 信号量函数。

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