Основные задачи параллельного программирования. Конспект лекций. Степанов Б.М. - 8 стр.

UptoLike

Составители: 

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