Page 71 - 4868
P. 71

69                                                               Ошибка! Стиль не определен.

               повторною спробою увійти в критичну секцію повинен робити паузу.Нехай
               Delay  –  деякий  код,  що  уповільнює  виконання  процесу.Тоді  можна
               використати наступний протокол, який реалізує умовну неподільну дію.

                     CSenter;
                       while (!B) { CSexit;Delay;CSenter; }
                       S;
                     CSexit;
                     Кодом Delay може бути, наприклад, порожній цикл, який виконується
               випадкову  кількість  раз.Щоб  уникнути  конфліктів  пам’яті  в  циклі  у  коді

               Delay  слід  використовувати  тільки  локальні  змінні.Цей  тип  протоколу
               «відходу» («back-off») є корисним і в самих протоколах CSenter, наприклад,
               його  можна  використовувати  замість  skip  в  циклі  затримки  протоколу
               «перевірити-встановити».

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

                     1. Що  собою  представляє  критична  секція  у  термінах  паралельної
               програми?
                     2. Яким  властивостям  повинні  задовольняти  протоколи  входу  в
               критичну секцію та виходу із неї?
                     3. Коли програма перебуває у стані з відсутнім живим блокуванням?
                     4. У  чому  полягає  перевага  протоколів  входу  і  виходу  реалізованих
               через змінну lock по відношенню до випадку використання двох змінних?
                     5. Які Ви знаєте інструкції реалізації умовних неподільних дій?
                     6. Який принцип роботи інструкції «перевірити-встановити»?
                     7. Що  розуміють  під  циклічним  блокуванням  у  термінах  паралельної
               програми?
                     8. Який       принцип        роботи       інструкції      «перевірити-перевірити-
               встановити»?
                     9. Які існують способи реалізації операторів await?
                     10. Яке призначення процедури Delay в операторі await?



                      ЛЕКЦІЯ 11. СПРАВЕДЛИВА СТРАТЕГІЯРІШЕННЯ ЗАДАЧІ

                                                КРИТИЧНОЇ СЕКЦІЇ


                     11.1. Алгоритм розриву вузла
                     Рішення  задачі  критичної  секції  з  циклічним  блокуванням  забезпечує

               взаємне  виключення,  відсутність  взаємних  блокувань,  активних  тупиків  і
               небажаних  пауз.Однак  для  забезпечення  властивості  можливості  входу  їм
               необхідна справедлива стратегія планування.Малоймовірно, що процес, який
               намагається увійти в критичну секцію, ніколи цього не зробить, однак може
               виникнути ситуація, коли декілька процесів будуть «вічно змагатися» за вхід
               у  критичну  секцію.Зокрема,  рішення  з  циклічним  блокуванням  не  керують
               порядком,  в  якому  декілька  призупинених  процесів  намагаються  увійти  в
   66   67   68   69   70   71   72   73   74   75   76