Сущность семафорных механизмов Дейкстры Р(S) - операция (P – от голландского Proberen – проверить) V(S) – операция (V – от голландского Verhogen – увеличить) InitSem (Имя-семафора, Начальное_значение_семафора) Семафорные механизмы Схема работы семафорного механизма Мьютекс
Алгоритм реализации семафорных операций P(S): S:=S-1; if S<0 then WAIT(S) {остановить процесс и поместить в очередь ожидания к семафору S}; V(S): if S<0 then RELEASE(S) {поместить один из ожидающих процессов очереди семафора в очередь готовности}; S:=S+1; демонстрация
Листинг - Взаимоисключение с помощью семафорных операций var S: Semaphore; begin InitSem(S, 1); parbegin ПР1: while true do begin P(S); CS1; {Критический интервал процесса ПР1} V(S); end and
ПР2: while true do begin P(S); CS2; {Критический интервал процесса ПР2} V(S); end parend end. Листинг (продолжение)