Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DiVM / OSISP / Лекции_ОССП_Р2.pdf
Скачиваний:
95
Добавлен:
11.05.2015
Размер:
1.33 Mб
Скачать

2.В случае сомнения, кому из двух процессов первому войти в критический интервал, выяснение этого вопроса не откладывается до бесконечности

3.Остановка какого-либо из процессов в остатке цикла не вызывает блокировки другого процесса.

3.1.8.2Обобщенная задача взаимного исключения

Даны N процессов, каждый со своим критическим интервалом. Необходимо организовать их функционирование так, чтобы в любой момент самое большее один процесс находился в критическом интервале. Для проверки правильности решения проверяем три условия.

begin integer array b, c [0..N]; integer очередь;

for очередь = 1 step 1 until N do begin

b[очередь] := 1;

c[очередь] := 1; end;

очередь := 0; parbegin

процесс 1: begin … end; процесс 2: begin … end;

процесс N: begin … end; parend;

end;

процесс i: begin integer j, k; Ai: b [i] := 0;

Li: if (очередь <> i) then begin

С[i] = 1;

k = очередь;

if (b [k] = 1) then очередь := i; goto Li;

end;

C[i] := 0;

for j := 1 step 1 until N do

if ((j <> i) and (C[j] = 0)) then goto Li;

Критический интервал i; очередь := 0;

C[i] := 1; b[i] := 1;

Oстаток цикла i; goto Ai;

end;

54

Соседние файлы в папке OSISP