Составители:
§6 Использование условной синхронизации
Используем в предыдущей задаче условную синхронизаци ю. Для
сохранения непротиворечивости (целостности) базы данных писа-
телям необходим исключительный доступ, а читатели могут рабо-
тать в любом количестве.
Если nr — ч ис ло читателей, получивших доступ к БД, а nw —
число писателей, получивших доступ к БД, то должно выполняться
условие
RW : (nr == 0 ∨ nw == 0) ∧ nw ≤ 1,
означающее, что 1) читатели и писатели не могут иметь доступ к
БД одновременно, 2) количество писателей не превосходит едини-
цы.
КРУПНОМОДУЛЬНОЕ РЕШЕНИЕ ЗАДАЧИ О ЧИТАТЕЛЯХ
И ПИСАТЕЛЯХ
int nr = 0, nw = 0;
## RW : (nr == 0 ∨ nw == 0) ∧ nw ≤ 1
process Reader[i = 1 to M] {
while (true) {
. . .
< await (nw == 0) nr = nr + 1; >
# необходим ость защиты неделимой операции возникает
# из-за того, что доступ у читателей возможен в
# условиях, когда нет писателей
[чтение БД];
< nr = nr − 1; >
# при освобождении ресурса нет необходимости ждать
}
}
process Writer[i = 1 to K] {
while (true) {
. . .
90
Страницы
- « первая
- ‹ предыдущая
- …
- 87
- 88
- 89
- 90
- 91
- …
- следующая ›
- последняя »