Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Презентации лекций по ТОИ / 18-Проблема взаимного исключения.pps
Скачиваний:
46
Добавлен:
02.06.2015
Размер:
1.72 Mб
Скачать

Программные методы решения: вариант 1

Процедура

инициализации procedure INIT; common integer begin

N := 1 ; start(P1) ;

start(P2) end INIT .

Устанавливает очерёдность выполнения критической секции.

Все ли требования к процесс

критической секции выполняются?

begin

while true do begin

BEFORE1 ;

while N = 2 do ;

CS1 ;

N := 2 ;

AFTER1 ;

end end P1 .

integer N ;

begin

while true do begin

BEFORE2 ;

while N = 1 do ;

CS2 ;

N := 1 ;

AFTER2 ;

end end P2 .

31

Программные методы решения: вариант 1

Процедура

инициализации procedure INIT; common integer N ; begin

N := 1 ; start(P1) ;

start(P2) end INIT .

Первый процесс

Второй процесс

process P1;

process P2;

common integer N ;

common integer N ;

begin

begin

while true do

while true do

begin

begin

BEFORE1 ;

BEFORE2 ;

while N = 2 do ;

while N = 1 do ;

CS1 ;

CS2 ;

N := 2 ;

N := 1 ;

AFTER1 ;

AFTER2 ;

end

end

end P1 .

end P2 .

32

Программные методы решения: вариант 1

procedure common begin

N := 1 start(P1) ;

start(P2) end INIT .

Может оказаться, что процесс, не требующий монопольного использования ресурса, блокирует работу другого процесса, которому необходимо

выполнить критическую секцию N ;

begin

begin

BEFORE1 ;

BEFORE2 ;

while N = 2 do ;

while N = 1 do ;

CS1 ;

CS2 ;

N := 2 ;

N := 1 ;

AFTER1 ;

AFTER2 ;

end

end

end P1 .

end P2 .

33

Программные методы решения: вариант 2

Процедура

инициализации

procedure INIT;

common boolean C1,C2 ; begin

C1 := false ;

C2 := false ; start(P1) ;

start(P2) end INIT .

Первый процесс

process P1;

common boolean C1,C2 ; begin

while true do begin

BEFORE1 ;

while C2 do ; C1 := true ;

CS1 ;

C1 := false ; AFTER1 ;

end end P1 .

Второй процесс

process P2;

common boolean C1,C2 ; begin

while true do begin

BEFORE2 ;

while C1 do ; C2 := true ;

CS2 ;

C2 := false ; AFTER2 ;

end end P2 .

34

Программные методы решения: вариант 2

Процедура

инициализации

procedure INIT; common boolean begin

C1 := false ;

C2 := false ; start(P1) ;

start(P2) end INIT .

Устанавливается признак занятости критической секции.

Все ли требования к критической секции процесс

выполняются?

C1,C2 ;

begin BEFORE1 ;

while C2 do ; C1 := true ;

CS1 ;

C1 := false ; AFTER1 ;

end end P1 .

begin BEFORE2 ;

while C1 do ; C2 := true ;

CS2 ;

C2 := false ; AFTER2 ;

end end P2 .

35

Программные методы решения: вариант 2

Процедура

инициализации

procedure INIT;

common boolean C1,C2 ; begin

C1 := false ;

C2 := false ; start(P1) ;

start(P2) end INIT .

Первый процесс

process P1;

common boolean C1,C2 ; begin

while true do begin

BEFORE1 ;

while C2 do ; C1 := true ;

CS1 ;

C1 := false ; AFTER1 ;

end end P1 .

Второй процесс

process P2;

common boolean C1,C2 ; begin

while true do begin

BEFORE2 ;

while C1 do ; C2 := true ;

CS2 ;

C2 := false ; AFTER2 ;

end end P2 .

36

Программные методы решения: вариант 2

Процедура

инициализации

procedure INIT;

common boolean C1,C2 ; begin

C1 := false ;

C2 := false ; start(P1) ;

start(P2) end INIT .

Первый процесс

process P1;

common boolean C1,C2 ; begin

while true do begin

BEFORE1 ;

while C2 do ; C1 := true ;

CS1 ;

C1 := false ; AFTER1 ;

end end P1 .

Второй процесс

process P2;

common boolean C1,C2 ; begin

while true do begin

BEFORE2 ;

while C1 do ; C2 := true ;

CS2 ;

C2 := false ; AFTER2 ;

end end P2 .

37

Программные методы решения: вариант 2

Процедура

инициализации

procedure INIT;

common boolean C1,C2 ; begin

C1 := false ;

C2 := false ; start(P1) ;

start(P2) end INIT .

Первый процесс

process P1;

common boolean C1,C2 ; begin

while true do begin

BEFORE1 ;

while C2 do ; C1 := true ;

CS1 ;

C1 := false ; AFTER1 ;

end end P1 .

Второй процесс

process P2;

common boolean C1,C2 ; begin

while true do begin

BEFORE2 ;

while C1 do ; C2 := true ;

CS2 ;

C2 := false ; AFTER2 ;

end end P2 .

38

Программные методы решения: вариант 2

Процедура

инициализации

procedure INIT;

common boolean C1,C2 ; begin

C1 := false ;

C2 := false ; start(P1) ;

start(P2) end INIT .

Первый процесс

process P1;

common boolean C1,C2 ; begin

while true do begin

BEFORE1 ;

while C2 do ; C1 := true ;

CS1 ;

C1 := false ; AFTER1 ;

end end P1 .

Второй процесс

process P2;

common boolean C1,C2 ; begin

while true do begin

BEFORE2 ;

while C1 do ; C2 := true ;

CS2 ;

C2 := false ; AFTER2 ;

end end P2 .

39

Программные методы решения: вариант 2

Процедура

инициализации

procedure INIT;

common boolean C1,C2 ; begin

C1 := false ;

C2 := false ; start(P1) ;

start(P2) end INIT .

Первый процесс

process P1;

common boolean C1,C2 ; begin

while true do begin

BEFORE1 ;

while C2 do ; C1 := true ;

CS1 ;

C1 := false ; AFTER1 ;

end end P1 .

Второй процесс

process P2;

common boolean C1,C2 ; begin

while true do begin

BEFORE2 ;

while C1 do ; C2 := true ;

CS2 ;

C2 := false ; AFTER2 ;

end end P2 .

40

Соседние файлы в папке Презентации лекций по ТОИ