【问题标题】:Two type of wait() for semaphore . which one is True ?信号量的两种 wait() 类型。哪一个是 True ?
【发布时间】:2018-05-07 18:59:38
【问题描述】:

我正在阅读 Silberschatz 的书和信号量,我看到一些令人困惑的东西。

在 Silberschatz'book 中有两种 wait() 定义。

第一个是:

wait(S) { 
    while (S<= 0)
        ; //busy-wait
    S--; 
}

第二个是:

wait(semaphore *S) {
S->value--;
if (S->value < 0) {
    add this process to S->list;
    block();
    }
}

哪一个是真的? 当我们调用等待信号量时,我们首先应该做什么?检查信号量值或减少其值?

【问题讨论】:

    标签: concurrency operating-system semaphore mutual-exclusion


    【解决方案1】:

    两者都是正确的,但正如书中明确提到的那样,第一个定义存在busy-waiting的问题。这意味着它使 CPU 保持忙碌但没有工作,因此浪费了 CPU 周期。

    而在第二个定义中没有忙等待的问题,因为只要信号量的值不大于0,则进程被阻塞,因此进入等待状态,这意味着它被取消了CPU,不能再浪费 CPU 周期了。

    【讨论】:

      猜你喜欢
      • 2021-04-01
      • 2020-07-18
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      • 2011-02-03
      • 2021-08-13
      • 2016-03-27
      • 2015-09-28
      相关资源
      最近更新 更多