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