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

UptoLike

< await (nr == 0 and nw == 0) nw = nw + 1; >
# здесь защита связана с условием nw 1: ресурс
#может быть захвачен не более, чем одним писателем
[запись в БД];
< nw = nw 1; >
# освобождение не требует задержки
}
}
Замечание. Условия защиты при захвате ресурса определяют-
ся предикатом. При освобождении ресурса никаких условий соблю-
дать не требуется.
§7 Метод “передачи эстафеты”
Описываемый метод “передачи эстафеты” позволяет реализовать
любой оператор < await; >.
Рассмотрим двоичный семафор e с начальным значением 1; он
будет управлять входом в любое неделимое дейс твие.
С каждым условием защиты связывается один семафор и один
счетчик, причем их начальные значения равны 0.
Пусть r семафор защиты в процессе-читателе, dr
счетчик приостановленных процессов-читателей, w семафор
защиты в процессе-писателе, dw счетчик приостановлен-
ных процессов-писателей. Поскольку сначала нет ожидающих
процессов-читателей и процессов-писателей , то все их начальные
значения равны 0.
СХЕМА ВЗАИМОДЕЙСТВИЯ ЧИТАТЕЛЕЙ И ПИСАТЕЛЕЙ
int nr = 0, ## RW : (nr == 0 or nw == 0) and nw <= 1
nw = 0;
sem e = 1, #семафор управления входом в критические секции
r = 0, #семафор для приостановки читателей
w = 0; #семафор для приостановки писателей
91