Page 128 - 6571
P. 128

Оператор B визначає логічний вираз, a S – список операторів,
                  що  повинні  бути  виконані  в  одній  неподільній  дії,  якщо  B  має
                  значення  «істина».  Останні  два  неподільні  оператори  в  обох

                  процесах мають наступний вигляд:
                        < S; >

                        За допомогою першої форми може бути представлена будь-

                  яка  умовна  синхронізація,  а  друга  форма  є  її  скороченням  для
                  часткового  випадку,  в  якому  значення  умови  B  є  незмінним  та
                  рівним «істина».

                        Для  реалізації  операторів  await  з  лістингу  23  можна
                  скористатися           описаними          раніше        спільними          двійковими
                  семафорами.  Нехай  e  –  двійковий  семафор  з  початковим

                  значенням 1, який використовується для керування входом (entry)
                  у будь-яку неподільну дію.

                        З  кожною  умовою  захисту  B  повинен  бути  зв’язаний  один
                  семафор і один лічильник з нульовими початковими значеннями.
                  Семафор  необхідний  для  призупинення  процесу  до  моменту,
                  коли умова захисту стане рівною «істина». У лічильнику в свою

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

                  семафора  і  два  лічильника.  Нехай  r  –  семафор,  пов’язаний  з
                  умовою  захисту  в  процесі-читача,  a  відповідно  dr  –  лічильник
                  призупинених  процесів-читачів.  Аналогічно  нехай  з  умовою

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

                  читачів  або  письменників,  тому  значення  змінних  r,  dr,  w  і  dw
                  рівні 0.
                        Використання трьох семафорів (e, r та w) і двох лічильників

                  (dr та dw) описано в лістингу 24.


                        Лістинг 24 – Реалізація схеми читачів і письменників за до-
                  помогою методу передачі естафети
                        int nr = 0, nw = 0;
                        sem e = 1,  # керує входом в критичні секції
                        r = 0,      # використовується для призупинення читачів



                                                             127
   123   124   125   126   127   128   129   130   131   132   133