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

UptoLike

3) while (true) {
4) while (TS(lock)) skip; # протокол входа
5) [критическая секция];
# ввиду свойства TS здесь lock == true
6) lock = false; # восстанавливаем возможность доступа
# к критическим секциям
7) [некритическая секция];
8) }
9) }
Свойства этой программы состоят в следующем.
(1) "Взаимное исключение" выполнено, ибо если lock =
false, и несколько процессов хотят войти в критическую секцию,
то только один войдет в нее и сделает присваивание lock = true
другие не войдут).
(2) "Отсутствие взаимной блокировки" выполнено: если оба
процесса находятся во входных протоколах, то lock имеет значение
false, и лишь один из них, войдя в критическую секцию, сразу
изменит помощью TS) значение переменной lock на true (второй
же процесс войти в критическую секцию не сможет).
(3) Излишние задержки не возникают: если оба процесса вне
критических секций, то один из них может войти.
(4) Если используется стратегия планирования, справедливая
в слабом смысле, то выполнение возможности входа не гарантиру-
ется (возможен поток значений false у перемен ной lock как раз в
моменты проверок этого значения процессом); однако, если страте-
гия планирования справедлива в сильном смысле, то возможность
входа гарантируется.
Правило: при решении задачи критической секции с цикличе-
ской блокировкой протокол выхода должен присваивать разделя-
емым переменным их начальные значения.
§4 Протокол “проверить–проверить–установить”
Применение стратегии “проверить–установить” приводит к сниже-
нию производительности из-за частого обращения к памяти, что
48