ВУЗ:
Составители:
8
b:= true;
Cobegin
Процесс 1:
begin
Начальная часть процесса 1
while not b do;
Критический интервал 1,
b:= false;
Оставшаяся часть процесса 1
End;{Процесс 1}
Процесс 2:
Begin
Начальная часть процесса 2
while
b do ;
Критический интервал 2;
b:= true;
Оставшаяся часть процесса 2
End;{Процесс 2}
Coend;
End;
Для анализа данного решения рассмотрим временную диаграмму, приведенную на
рис.4. В общем случае предполагается, что нам ничего не известно о скоростях протекания
процессов и о времени их протекания. Допустим, что “процесс 1” – быстрый, а “процесс 2”–
медленный. В рассматриваемом случае взаимного исключения возникает ситуация, когда
процесс 2 находится вне критического интервала и препятствует процессу 1 войти в свой
критический интервал. То есть, с общей позиции, это решение неудовлетворительно. Другое
дело, если процессы короткие (то есть, знаем скорость протекания процессов.)
Рис.4
Б) Использование двух вспомогательных переменных, показывающих, какой из про-
цессов находится в критическом интервале.
Var
b1, b2 : boolean;
Begin
b1 := false;
b2 := false;
{b1– процесс 1 не находится в критическом интервале, b2 – процесс 2 не находится в крити-
ческом интервале}
cobegin
процесс 1: begin
TRUE FALSE TRUE
Про-
цесс1
Про-
цесс2
КИ КИ
КИ
Н
b:= true; Cobegin Процесс 1: begin Начальная часть процесса 1 while not b do; Критический интервал 1, b:= false; Оставшаяся часть процесса 1 End;{Процесс 1} Процесс 2: Begin Начальная часть процесса 2 while b do ; Критический интервал 2; b:= true; Оставшаяся часть процесса 2 End;{Процесс 2} Coend; End; Для анализа данного решения рассмотрим временную диаграмму, приведенную на рис.4. В общем случае предполагается, что нам ничего не известно о скоростях протекания процессов и о времени их протекания. Допустим, что “процесс 1” – быстрый, а “процесс 2”– медленный. В рассматриваемом случае взаимного исключения возникает ситуация, когда процесс 2 находится вне критического интервала и препятствует процессу 1 войти в свой критический интервал. То есть, с общей позиции, это решение неудовлетворительно. Другое дело, если процессы короткие (то есть, знаем скорость протекания процессов.) Про- Н КИ КИ цесс1 КИ Про- цесс2 TRUE FALSE TRUE Рис.4 Б) Использование двух вспомогательных переменных, показывающих, какой из про- цессов находится в критическом интервале. Var b1, b2 : boolean; Begin b1 := false; b2 := false; {b1– процесс 1 не находится в критическом интервале, b2 – процесс 2 не находится в крити- ческом интервале} cobegin процесс 1: begin 8
Страницы
- « первая
- ‹ предыдущая
- …
- 6
- 7
- 8
- 9
- 10
- …
- следующая ›
- последняя »