Page 103 - 4868
        P. 103
     101                                                              Ошибка! Стиль не определен.
               описано в лістингу 1.24. Для виходу із неподільних дій використовується код
               помічений через SIGNAL.
                     if (nw == 0 and dr > 0) {
                       dr = dr-1;
                       V(r);
                       # відновити процес-читач, або
                     }elseif (nr == 0 and nw == 0 and dw > 0) {
                       dw = dw-1;
                       V(w);
                       # відновити процес-письменник, або
                     }else{
                       V(e);
                       # звільнити блокування входу
                     }
                     Роль  коду  SIGNAL  полягає  у  сигналізації  тільки  одному  із  трьох
               семафорів.  Це  означає,  що  якщо  немає  активних  письменників,  але  є
               призупинений читач, то він може бути продовжений за допомогою операції
               V(r). Якщо немає активних читачів або письменників, але є призупинений
               письменник, то він може бути продовжений за допомогою операції V(w). В
               іншому  випадку,  якщо  немає  відкладених  процесів,  які  можна  безпечно
               продовжити,  то  вхідний  семафор  отримає  сигнал  за  допомогою  операції
               V(e).
                     Лістинг  1.24  –  Реалізація  схеми  читачів  і  письменників  за  допомогою
               методу передачі естафети
                     int nr = 0, nw = 0;
                     sem e = 1,  # керує входом в критичні секції
                     r = 0,      # використовується для призупинення читачів
                     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; >
     	
