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

发布于 2024-11-09 05:14:15 字数 365 浏览 2 评论 0原文

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

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); 为什么

我们在这里检查 if(s<0)

How do i Define a semaphore with busy waiting solution ??i got something like this

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

but i don't understand the condition required in signal block

if (s<0) {
// remove process p from queue
wakeup(p);
}

why we are checking if(s<0) here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

单挑你×的.吻 2024-11-16 05:14:15

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

The condition should probably detect if there is any process sleeping (blocked) in the queue. However, I think these conditions are not correct, considering behaviour of a binary semaphore (semaphore initially with s == 1) the pseudocode should be

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);
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文