Составители:
< 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
Страницы
- « первая
- ‹ предыдущая
- …
- 88
- 89
- 90
- 91
- 92
- …
- следующая ›
- последняя »