Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Задания по теме «Взаимное исключение»
Программные методы решения проблемы
взаимного исключения
1. Задача: решить программным способом задачу взаимного исключения. Являются ли приведенные ниже процедуры решением поставленной задачи? Если нет, объясните, когда могут возникнуть ошибки?
Решение:
process INIT; common boolean C1. C2;
begin С1:= false;С2:= false; start (P1); start (P2); end;
process P1;
Begin
while true do
begin BEFORE1; C1:= true; while C2 do; CS1; C1:= false; AFTER1; end
end;
process P2;
Begin
while true do
begin BEFORE2; while C1 do; C2:= true; CS1; C2:= false; AFTER2; end
end;
2. Решить задачу взаимного исключения, используя логические переменные и процедуру перевода процесса в состояние задержки (приостановки) Delay(T), где параметр T задает время задержки процесса (время, на которое он выводится из конкуренции за время процессора).
3. Алгоритм Деккера можно сформулировать следующим образом:
Процедура инициализации | Первый процесс | Второй процесс |
procedure INIT; common boolean C1,C2; common integer N ; begin C1:= false; C2:= false; N:= 1; start(P1); start(P2) end INIT . | process P1 ; common boolean C1,C2; begin while true do begin BEFORE1 ; C1:= true; while C2 do begin if N<>1 then begin C1:= false; while N<>1 do; C1:= true; end end; CS1 ; C1:= false; N:= 2; AFTER1 ; end end P1 . | process P2 ; common boolean C1,C2; begin while true do begin BEFORE2 ; C2:= true; while C1 do begin if N<>2 then begin C2:= false; while N<>2 do; C2:= true; end end; CS2 ; C2:= false; N:=1; AFTER2 ; end end P2 . |
Написать алгоритм Деккера для N процессов.
4. Решается ли в приведенных ниже программах проблема взаимного исключения (random – процедура, генерирующая случайное число, delay (T) – процедура задержки процесса на время T, в течение которого процесс не будет конкурировать за время процессора)?
process INIT; common boolean C1. C2; common integer N; common real T1, T2;
begin С1:= false;С2:= false; T1:= random; T1:= random; N:=1; start (P1); start (P2); end;
process P1;
Begin
while true do
begin BEFORE1;
C1:= true;
while C2 and (N<>1) do delay (T1);
CS1;
C1:= false; N:=2;
AFTER1;
End
end;
process P2;
Begin
while true do
begin BEFORE2;
C2:= true;
while C1 and (N<>2) do delay (T2);
CS2;
C2:= false; N:=1;
AFTER2;
End
end;
Дата публикования: 2014-11-29; Прочитано: 242 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!