【问题标题】:how to Define a semaphore with busy waiting solution如何使用忙等待解决方案定义信号量
【发布时间】:2011-05-21 11:26:37
【问题描述】:

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

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

但我不明白信号块所需的条件

如果 (s

为什么我们在这里检查 if(s

【问题讨论】:

    标签: operating-system semaphore


    【解决方案1】:

    该条件可能应该检测队列中是否有任何进程正在休眠(阻塞)。但是,我认为这些条件是不正确的,考虑到二进制信号量(信号量最初为 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);
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-03-31
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      • 2014-01-03
      • 1970-01-01
      • 1970-01-01
      • 2014-04-07
      • 2015-08-30
      相关资源
      最近更新 更多