Технология программирования для распределенных параллельных систем. Демьянович Ю.К - 24 стр.

UptoLike

Пусть постоянные переменные монитора 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