信号量的两种 wait() 类型。哪一个是真的?
Two type of wait() for semaphore . which one is True ?
我正在阅读 Silberschatz 的书和信号量,我看到了一些令人困惑的东西。
在 Silberschatz 的书中有两种类型的 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();
}
}
哪个是真的?
当我们调用 wait for semaphore 时,我们首先应该做什么?检查信号量值或减少其值的数量?
两者都是正确的,但正如书中明确提到的那样,第一个定义存在busy-waiting的问题。这意味着它使 CPU 保持忙碌但不工作,因此浪费了 CPU 个周期。
而第二种定义不存在忙等待的问题,因为每当信号量的值不大于0时,进程就会被阻塞,从而进入等待状态,即被占用关闭 CPU,不能再浪费 CPU 个周期。
我正在阅读 Silberschatz 的书和信号量,我看到了一些令人困惑的东西。
在 Silberschatz 的书中有两种类型的 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();
}
}
哪个是真的? 当我们调用 wait for semaphore 时,我们首先应该做什么?检查信号量值或减少其值的数量?
两者都是正确的,但正如书中明确提到的那样,第一个定义存在busy-waiting的问题。这意味着它使 CPU 保持忙碌但不工作,因此浪费了 CPU 个周期。
而第二种定义不存在忙等待的问题,因为每当信号量的值不大于0时,进程就会被阻塞,从而进入等待状态,即被占用关闭 CPU,不能再浪费 CPU 个周期。