Применение синхронизирующих примитивов к задаче взаимного исключения
3.3. Применение синхронизирующих примитивов к задаче взаимного исключения
Построение N процессов, содержащих критические интервалы, которые не должны выполняться одновременно (см. ¬2.2), теперь становится тривиальной задачей. Ее можно решить с помощью единственного двоичного семафора, который назовем, скажем, "свободно". Значение семафора "свободно" равняется числу процессов, которым разрешено в данный момент войти в свои критические интервалы: "свободно = 1" означает, что ни один из процессов не находится в своем критическом интервале; "свободно = 0" означает, что один из процессов находится в своем критическом интервале.
Общая схема программы такова:
begin integer свободно; свободно := 1; parbegin
процесс 1: begin ....... end; процесс 2: begin ....... end; процесс N: begin ....... end; parend
end
где i-ый процесс имеет вид:
процесс i: begin
Li: P(свободно); критический интервал i; V(свободно); остаток цикла i; goto Li end