如何使用繁忙的等待解决方案定义信号量?我得到了类似的东西
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);
}
}
但我不明白信号块所需的条件
if(s <0){ //从队列中删除进程p 唤醒(P); }
我们为什么要检查(s&lt; 0)这里
答案 0 :(得分:0)
条件应该可以检测队列中是否有任何进程正在休眠(阻塞)。但是,我认为这些条件不正确,考虑到二进制信号量的行为(信号量最初为s == 1),伪代码应该是
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);
}
}