Page 125 - 6571
P. 125

Лістинг  22  –  Рішення  задачі  про  читачів  та  письменників  з
            використанням семафорів
                  int nr = 0;    # число активних читачів
                  sem rw = 1;    # блокування доступу до бази даних
                  sem mutexR = 1;  # блокування доступу читачів до nr
                  process Reader[i = 1 to m] {
                    while (true) {

                      ...
                      P(mutexR);
                      nr = nr+1;
                      if (nr == 1) P(rw); # отримати блокування, якщо пе-
            рший
                      V(mutexR);
                      зчитати базу даних;
                      P(mutexR);
                      nr = nr-1;
                      if (nr == 0) V(rw); # зняти блокування, якщо остан-
            ній
                      V(mutexR);
                    }
                  }
                  process Writer[i = 1 to n] {
                    while (true) {
                      ...
                      P(rw);

                      записати в базу даних;
                      V(rw);
                    }
                  }

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

            тафети, що використовує спільні двійкові семафори як для ви-
            ключення,  так  і  для  сповіщення  призупинених  процесів.  Метод
            передачі  естафети  можна  застосувати  для  реалізації  будь-яких
            операторів типу await, що в свою чергу дозволяє створення будь-

            якої умовної синхронізації. Даний метод також можна викорис-
            товувати для точного керування послідовністю дій за допомогою

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

                                                        124
   120   121   122   123   124   125   126   127   128   129   130