Заметки о программировании

       

Применение синхронизирующих примитивов к задаче взаимного исключения



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



Содержание раздела