Составители:
Рубрика:
# - получает сигнал при count меньше n
not_empty;
# - получает сигнал при count больше нуля
procedure deposit(type T data) {
while (count==n) wait(not_full);
buf[rear]=data; rear=rear+1%n; count++;
signal(not_empty);
}
procedure fetch(type T &result) {
while (count==0) wait(not_empty);
result=buf[front]; front=(front+1)%n; count--;
signal(not_full);
}
}
Как и прежде, процесс, запущенный signal, начинает выпол-
няться и сразу (из-за нашей стратегии) и потому в промежуточ-
ные моменты, например, другой процесс-производитель может об-
ратиться к процедуре deposit и заполнить свободное место. Таким
образом, процесс, запущенный signal должен перепроверить усло-
вия запуска, а при его выполнении он может работать.
§ 8. Задача о “читателях” и “писателях”
Процесс-читатель может только читать записи базы данных, а
процесс-писатель просматривает их и изменяет.
Читатели обращаются к базе данных одновременно, а писатель
должны иметь исключительный доступ, а именно: писатель в дан-
ной базе может быть единовременно только один; других писателей
и читателей в этот промежуток времени быть не должно.
В этой задаче упорядочивающий монитор RW дает разрешение
на доступ к базе данных.
Поскольку имеется два вида процессов (read и write) и два
вида действий на каждый процесс (начало и конец), то в мониторе
нужны четыре вида процедур:
request_read запрос на чтение;
release_read окончание чтения;
request_write запрос на запись;
release_write окончание записи.
24
Страницы
- « первая
- ‹ предыдущая
- …
- 21
- 22
- 23
- 24
- 25
- …
- следующая ›
- последняя »