Семафоры
Это объект с операциями SimWait() и SimSignal(). Его атрибутом обычно является целое число и очередь, а его операции определены следующим образом.
SimWait() – если значение целого числа, входящего в состав семафора больше 0, уменьшить его на единицу и позволить процессу продолжить работу, в противном случае приостановить процесс, пометить его, как блокированный у данного семафора.
SimSignal() – если ни один процесс не ждет у данного семафора, увеличить целое число на единицу, в противном случае освободить один процесс и продолжить его работу с инструкции, следующей за инструкцией «ждать».
При использовании семафорного механизма процесс, которому отказано в доступе к критической ресурсу, находится в состоянии пассивного ожидания.