Теория распараллеливания и синхронизация. Демьянович Ю.К - 46 стр.

UptoLike

while (true) {
< await (!lock) lock = true; > # если !lock, то вход
# разрешен: входим. . .
[критическая секция];
lock = false; # выходим из критической секции и сразу
# устанавливаем lock = false
[некритическая секция];
}
}
Замечание. Использование логической переменной lock при
произвольном числе процессов аналогично.
§3 Инструкция “проверить–установить”
Инструкция “проверить–установить” (test and set кратко TS) по-
лучает в качестве аргумента переменную lock, в неделимом дей-
ствии присваивает ей значение true, а затем возвращает предыду-
щее сохраненное значение переменной lock. Это описывае тся так:
bool TS(bool lock) {
< bool initial = lock; # сохраняем н ачальное значение
lock = true; # устанавливаем lock внутри неделимого действия
return initial; > # возвращаем предыдущее значение
}
Здесь приведем программу с использованием инструкции TS.
Такое ее и сп ользование называется циклической блокировкой.
КРИТИЧЕСКИЕ СЕКЦИИ НА ОСНОВЕ
“ПРОВЕРИТЬ–УСТАНОВИТЬ”
(ЦИКЛИЧЕСКАЯ БЛОКИРОВКА)
1) bool lock = false;
2) process CS[i = 1 to n ] {
47