Составители:
Рубрика:
Пусть постоянные переменные монитора RW: nr — число читате-
лей, nw — число писателей.
Правильная синхронизация должна удовлетворять условию
RW: (nr==0 ∪ nw==0) ∩ nw<=1 (инвариант монитора).
monitor RW_Contr {
int nr=0, nw=0;
cond oktoread; # получает сигнал при nw==0
cond oktowrite; # получает сигнал при nr==0 и nw==0
procedure request_read() {
while (nw>0) wait(oktoread);
nr=nr+1;
}
procedure release_read() {
nr=nr-1;
if (nr==0) signal(oktowrite);
# запустить один процесс-писатель
}
procedure request_write() {
while (nr>0 || nw>0) wait(oktowrite);
nw=nw+1;
}
procedure release_write() {
nw=nw-1;
signal(oktowrite);
# запустить один процесс-писатель
signal_all(oktoread);
# запустить все процессы-читатели
}
}
При вызове
1) RW_Contr.request_read — запрос чтения: процесс-читатель
должен приостановиться если nw>0, а в противном случае (nw=0)
число читателей возрастает на единицу;
2) RW_Contr.release_read — уведомление о конце чтения:
процесс-читатель уведомляет о том, что он кончил чтение; при этом
25
Страницы
- « первая
- ‹ предыдущая
- …
- 22
- 23
- 24
- 25
- 26
- …
- следующая ›
- последняя »