Составители:
[размышляет (датчик с.ч.)];
}
}
process Philosopher[4] {
while (true) {
P(fork[0]); P(fork[4]);
# взял правую вилку, потом — левую
[ест (датчик с.ч.)];
V(fork[0]); V(fork[4]);
# освободи л правую, потом — левую вилку
[размышляет (датчик с.ч.)];
}
}
§5 Задача “о читателях и писателях” как
задача исключения
В базе данных (БД) имеется лишь два типа процессов: читатели и
писатели. Читатели просматривают записи (транзакции чтения), а
писатели просматривают и изменяют записи (транзакции чтения и
записи). Исходное состояние базы данных считается непротиворе-
чивым (осмысленным). Каждая транзакция переводит ее из одного
непротиворечивого состояния в другое. Для отсутствия взаимно-
го вмешательства процесс-писатель должен иметь исключитель-
ный доступ к базе данных. Если ни один процесс-писатель не обра-
щается к базе данных, то ее могут читать любое число процессов-
читателей.
Пус ть rw — семафор взаимного исключения с начальным зна-
чением 1. Читатели должны блокировать группу писателей, но при
этом лишь первый из них устанавливает блокировку P(rw); осталь-
ные читатели могут сразу обращаться к базе данных. Последний
активный процесс-читатель должен снимать блокировку. Однако,
сначала приведем решение с дополнительным ограничением: не
только каждый писатель, но и любой читатель имеет исключитель-
ный доступ к БД.
86
Страницы
- « первая
- ‹ предыдущая
- …
- 83
- 84
- 85
- 86
- 87
- …
- следующая ›
- последняя »
