ВУЗ:
Составители:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 9
- 10
- 11
- 12
- 13
- …
- следующая ›
- последняя »