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

UptoLike

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

11
результата, а затем записывает, если это битовая переменная, во все разряды 1. Таким обра-
зом, мы получаем значение переменной хсвободноилизанятои запрещаем автоматиче-
ски дальнейшее её использование установкой 1. Важной особенностью команды TS является
её неделимость, которая заключается в том, что её выполнение не может быть прервано (это
единая операция).
Введём аналог команды TS на языке высокого уровня. Процедура (или функция)
TS(x) читает значение булевой переменной х и присваивает ей значение false. Эта процедура
является неделимой (существенное предположение для неё).
Вариант 1
Чтение х в локальную переменную (проверка можно ли пройти в критический интер-
вал).
Var
x : boolean;
begin
x:= true;
cobegin
Процесс 1:
Var
b1: boolean;
begin
b1:= false;
while not b1 do
b1:=TS(x);
Критический интервал 1;
x:= true;
Оставшаяся часть процесса 1;
end;
Процесс 2:
Var
b2: boolean;
begin
b2:= false;
while not
b2 do
b2:=TS(x);
Критический интервал 2;
x:= true;
Оставшаяся часть процесса 2;
end;
coend
end
Каждый процесс начинает работу с того, что присваивает своей локальной перемен-
ной (b1 и b2) значение false и тем самым обеспечивает выполнение одного повторения цикла
while. В теле цикла с помощью функции TS вычисляется значение глобальной переменной х,
которая показывает возможность входа в критический интервал. Поскольку TS является не-
делимой, то даже при строго одновременном обращении только один из процессов получит
возможность входа в критический интервал. Второй процесс при этом будет находиться в
цикле, ожидая изменения глобальной переменной х. Это изменение производится после вы-
хода из критического интервала. Такое нахождение процесса в цикле называют циклом ак-
тивного ожидания, потому что при этом выполняются команды процессора (иначе говоря,
занимается процессорное время).
результата, а затем записывает, если это битовая переменная, во все разряды 1. Таким обра-
зом, мы получаем значение переменной х “свободно” или “занято” и запрещаем автоматиче-
ски дальнейшее её использование установкой 1. Важной особенностью команды TS является
её неделимость, которая заключается в том, что её выполнение не может быть прервано (это
единая операция).
        Введём аналог команды TS на языке высокого уровня. Процедура (или функция)
TS(x) читает значение булевой переменной х и присваивает ей значение false. Эта процедура
является неделимой (существенное предположение для неё).
Вариант 1
        Чтение х в локальную переменную (проверка можно ли пройти в критический интер-
вал).
Var
        x : boolean;
begin
x:= true;
cobegin
        Процесс 1:
        Var
        b1: boolean;
        begin
        b1:= false;
        while not b1 do
        b1:=TS(x);
        Критический интервал 1;
        x:= true;
        Оставшаяся часть процесса 1;
        end;

        Процесс 2:
        Var
        b2: boolean;
        begin
        b2:= false;
        while not b2 do
        b2:=TS(x);
        Критический интервал 2;
        x:= true;
        Оставшаяся часть процесса 2;
        end;
coend
end
       Каждый процесс начинает работу с того, что присваивает своей локальной перемен-
ной (b1 и b2) значение false и тем самым обеспечивает выполнение одного повторения цикла
while. В теле цикла с помощью функции TS вычисляется значение глобальной переменной х,
которая показывает возможность входа в критический интервал. Поскольку TS является не-
делимой, то даже при строго одновременном обращении только один из процессов получит
возможность входа в критический интервал. Второй процесс при этом будет находиться в
цикле, ожидая изменения глобальной переменной х. Это изменение производится после вы-
хода из критического интервала. Такое нахождение процесса в цикле называют циклом ак-
тивного ожидания, потому что при этом выполняются команды процессора (иначе говоря,
занимается процессорное время).


                                           11