Page 143 - 6571
P. 143

дури  release_write  точно  відомо,  що  значення  обох  змінних
            nr та nw дорівнюють нулю. Отже, може продовжити роботу будь-
            який призупинений процес. Рішення з лістингу 27 не встановлює

            порядок  чергування  процесів-читачів  і  процесів-письменників.
            Замість цього дана програма запускає всі призупинені процеси і
            дозволяє стратегії планування процесів визначити, який з них пе-

            ршим  отримає  доступ  до  бази  даних.  Якщо  це  процес-
            письменник, то будуть призупинені всі процеси-читачі. Якщо ж
            першим отримає доступ процес-читач, то призупиниться запуще-
            ний процес-письменник.


                  Лістинг  27  –  Рішення  задачі  про  читачів  та  письменників  з
            використанням моніторів

                  monitor RW_Controller {
                    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); # всі процеси-читачі
                    }
                  }







                                                        142
   138   139   140   141   142   143   144   145   146   147   148