不会使用信号量唤醒其他进程
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 调用 wait
。 s
现在等于 -2。然后进程 1 完成并调用 signal
。 s
变为 -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
以下代码来自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 调用 wait
。 s
现在等于 -2。然后进程 1 完成并调用 signal
。 s
变为 -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