Page 119 - 6571
P. 119

}
                  process Consumer[j = 1 to N] {
                    while (true) {
                      /* витягти та видалити повідомлення result */

                      P(full);
                      P(mutexF);
                      result = buf[front];
                      front = (front+1) % n;
                      V(mutexF);
                      V(empty);
                      ...
                    }
                  }

                  Отже, нами було окремо вирішено дві підзадачі синхронізації
            (між одним виробником і споживачем та між декількома вироб-

            никами  і  споживачами),  які  пізніше  були  об’єднанні  для  отри-
            мання повного рішення задачі синхронізації між декількома про-
            цесами. Таким чином, скрізь, де присутні декілька видів синхро-
            нізації,  доцільно  реалізовувати  їх  окремо,  а  потім  об’єднувати

            рішення в одне ціле.


                  Запитання для самоперевірки

                  1. У чому полягає складність реалізації протоколів з активним
            очікуванням?
                  2. У яких випадках є доречним використання концепції сема-
            форів?

                  3. Яка основна ідея закладена у роботу семафора?
                  4. Що  собою  представляє  семафор  у  контексті  паралельної
            програми?

                  5. Що може виступати значенням семафора?
                  6. Який принцип роботи двійкового семафора?
                  7. Які основні задачі можуть бути вирішені із застосуванням

            семафорів?
                  8. Що собою представляє сигнальний семафор?
                  9. Який принцип роботи спільного двійкового семафора?

                  10. У чому полягає суть  задачі про кільцевий буфер?









                                                        118
   114   115   116   117   118   119   120   121   122   123   124