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
   124   125   126   127   128   129   130   131   132   133   134