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

UptoLike

приводит к конфликтам при использовании переменной lock.
Заменив протокол входа на протокол "проверить-провоерить-
установить", можно уменьшить затраты на конфликты.
ПРОТОКОЛ НА ОСНОВЕ
“ПРОВЕРИТЬ–ПРОВЕРИТЬ–УСТАНОВИТЬ”
while (lock) skip;
# пока установлено lock = true повторять цикл
while (TS(lock)); {
# попытка захватить lock [, равное false]
while (lock) skip; }
# повторять цикл, если попытка не удалась
#(lock успела сменить свое значение на true)
Этот протокол называется “проверить–проверить–установить”, по-
скольку в двух циклах lock лишь только проверяется и это не вли-
яет на другие процессы. Если lock = false .е. флаг блокировки
сброшен), то хотя бы один приостановленный процесс проверит ин-
струкцию TS (продолжаться будет лишь один из них).
КРИТИЧЕСКАЯ СЕКЦИЯ НА ОСНОВЕ ПРОТОКОЛА
“ПРОВЕРИТЬ–ПРОВЕРИТЬ–УСТАНОВИТЬ”
bool lock = false; # разделяемая блокировка
1) process CS[i = 1 to n] {
2) while (true) {
3) while (lock) skip; # протокол входа
4) while (TS(lock)) {
5) while (lock) skip;
6) }
7) [критическая секция];
8) lock = false; # протокол выхода
9) [некритическая секция];
10) }
11) }
49