Page 129 - 6571
P. 129
w = 0; # використовується для призупинення письмен-
ників
# завжди 0 <= (e+r+w) <= 1
int dr = 0, # число призупинених читачів
dw = 0; # число призупинених письменників
process Reader[і = 1 to M] {
while (true) {
# <await (nw == 0) nr = nr+1; >
P(e);
if (nw> 0) {
dr = dr+1;
V(e);
P(r);
}
nr = nr+1;
SIGNAL;
зчитати базу даних;
# <nr = nr-1; >
P(e);
nr = nr-1;
SIGNAL;
}
}
process Writer[i = 1 to N] {
while (true) {
# < await (nr == 0 and nw == 0) nw = nw+1; >
P(e);
if (nr> 0 or nw> 0) {
dw = dw+1;
V(e);
P(w);
}
nw = nw+1;
SIGNAL;
записати в базу даних;
# <nw = nw-1; >
P(e);
nw = nw-1;
SIGNAL;
}
}
128