Page 148 - 6571
P. 148

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

                  кого немає, то він знову засинає до приходу наступного відвіду-
                  вача.
                        Відвідувачі  і  перукар  є  процесами,  що  взаємодіють  між  со-

                  бою в моніторі-перукарні (рис. 16.1). Відвідувачі – це клієнти, які
                  запитують сервіс (стрижку) у перукаря. Перукар – це сервер, який
                  постійно надає їм сервіс. Даний тип взаємодії являє собою прик-
                  лад відносин клієнт-сервер.

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

                  get_haircut  (постригтися),  get_next_customer  (покликати
                  наступного)  і  finished_cut  (закінчити  стрижку).  Відвідувачі
                  викликають  процедуру  get_haircut.  Вихід  з  неї  відбувається
                  після того, як перукар закінчить стрижку відвідувача, що викли-

                  кав  процедуру.  Перукар  циклічно  викликає  процедуру  g
                  t_next_customer,  запрошуючи  клієнта  в  своє  крісло,  стриже
                  його і випускає з перукарні за допомогою виклику процедури f

                  nished_cut. Глобальні змінні служать для зберігання стану про-
                  цесів та «подання крісел», в яких процеси «сплять».



















                         Рисунок 16.1 – Ілюстрація задачі про сплячого перукаря


                        Дії перукаря та відвідувачів потребують синхронізації в мо-
                  ніторі. По-перше, перукарю і відвідувачу необхідна зустріч (ран-
                  деву), тобто перукар повинен дочекатися приходу відвідувача, а

                  відвідувач – звільнення перукаря. Рандеву аналогічно бар’єру для
                  двох процесів, оскільки для продовження роботи до нього повин-
                  ні підійти обидві сторони. Однак рандеву відрізняється від двох-


                                                             147
   143   144   145   146   147   148   149   150   151   152   153