Два типа ожидания () для семафора. какой из них правда? - PullRequest
0 голосов
/ 07 мая 2018

Я читал книгу и семафор Зильбершаца, которые, как я видел, сбивали с толку.

В книге 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 для семафора, что мы должны сделать в первую очередь? проверка значения семафора или уменьшение его значения?

1 Ответ

0 голосов
/ 08 мая 2018

Оба верны, но, как уже упоминалось в книге, ясно, что определение first имеет проблему Ожидание занятого . Это означает, что он загружает процессор, но не работает и, следовательно, тратит впустую циклы процессора.

Принимая во внимание, что во втором определении нет проблемы ожидания ожидания из-за того факта, что всякий раз, когда значение семафора не больше 0, процесс блокируется и, следовательно, переходит в состояние ожидания, что означает, что он снят с CPU и больше не может тратить циклы CPU.

...