Page 113 - 6571
P. 113

Лістинг 17 – Бар’єрна синхронізація з використанням сема-
            форів

                  sem arrive1 = 0, arrive2 = 0;
                  process Worker1 {
                    ...
                    V(arrive1); /* сигнал про прибуття */
                    P(arrive2); /* очікування іншого процесу */
                    ...
                  }
                  process Worker2 {
                    ...
                    V(arrive2); /* сигнал про прибуття */

                    P(arrive1); /* очікування іншого процесу */
                    ...
                  }

                  3. Задача про виробників та споживачів (спільні двійкові се-
            мафори). Розглянемо знову задачу про виробників та споживачів.
            У  попередньому  прикладі  передбачалося,  що  існує  тільки  один

            виробник і один споживач. Узагальнимо ту ж саму задачу на де-
            кілька  виробників  і  декілька  споживачів.  Приведене  нижче  рі-
            шення  демонструє  ще  один  випадок  застосування  семафорів  в
            якості сигнальних прапорців і вводить важливе поняття спільного

            двійкового семафора, що визначає ще один спосіб захисту крити-
            чних секцій коду.
                  У  задачі  про  виробників  і  споживачів  виробники

            пересилають повідомлення споживачам. Процеси спілкуються за
            допомогою  спільного  буфера,  що  керується  двома  операціями:
            deposit  (помістити)  і  fetch  (витягти).  Виконуючи  операцію

            deposit,  виробники  поміщають  повідомлення  в  буфер,  а
            споживачі в свою чергу отримують повідомлення за допомогою
            операції fetch. Для того щоб повідомлення не перезаписувалося

            і  кожне  з  повідомлень  могло  бути  прийняте  споживачем  тільки
            один  раз,  виконання  операцій  deposit  та  fetch  повинне
            чергуватися,  причому  першою  завжди  повинна  бути  операція

            deposit.
                  Реалізувати  необхідне  чергування  операцій  можна  за
            допомогою            семафорів.         У      даному         випадку         семафори

            використовуються  або  для  повідомлення  про  те,  що  процеси

                                                        112
   108   109   110   111   112   113   114   115   116   117   118