如何使用繁忙的等待解决方案定义信号量

时间:2011-05-21 11:26:38

标签: operating-system semaphore

如何使用繁忙的等待解决方案定义信号量?我得到了类似的东西

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)这里

1 个答案:

答案 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);
  }
}