Page 110 - 6571
P. 110

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

                  мовиключний доступ до ресурсу.
                        Семафори дозволяють спростити розв’язок задачі критичної
                  секції.  У  лістингу  4  було  представлено  рішення,  в  якому

                  використовуються  змінні  для  блокування  процесу,  зокрема
                  змінна  lock  має  значення  «істина»,  коли  жоден  процес  не
                  знаходиться  у  своїй  критичній  секції,  і  значення  «брехня»  в

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

                  не  стане  рівним  1,  і  після  того  як  це  сталося  присвоїти  їй
                  значення  0.  Виходячи  з  критичної  секції,  процес  повинен
                  присвоїти змінної lock значення 1.

                        Розглянемо роботу аналога одномісного семафора, що нази-
                  вається м’ютексом (слово mutex походить від mutual exclusion –
                  «взаємне виключення»), який використовується для синхронізації

                  одночасно виконуваних потоків.
                        М’ютекс  відрізняється  від  семафора  тим,  що  тільки  потік,
                  який ним володіє може його перевести в інший стан. Вони реалі-
                  зовані в більшості відомих на даний час операційних системах і

                  основне  їх  призначення  –  організація  процедури  взаємного  ви-
                  ключення для декількох процесів.

                        М’ютекс  представляє  собою  двійковий  семафор,  який  може
                  перебувати  в  одному  із  двох  станів  –    сигнальному  або
                  несигнальному  (відкритий  і  закритий  відповідно).  Коли  певний
                  процес стає власником об’єкта mutex, то останній переводиться в

                  несигнальний  стан.  Якщо  потік  покидає  м’ютекс,  то  його  стан
                  відповідно стає сигнальним.
                        Завдання м’ютекса полягає у захисті об’єкта від доступу до

                  нього з інших процесів, відмінних від того, який заволодів м'юте-
                  ксом. М’ютекс перебуває в сигнальному стані тільки тоді, коли
                  він не належить жодному із процесів. Як тільки хоча б один про-
                  цес отримує контроль над м’ютексом, він переходить у несигна-

                  льний стан і залишається в ньому доти, поки не буде звільнений
                  власником. На відміну від критичних секцій, м’ютекси дозволя-


                                                             109
   105   106   107   108   109   110   111   112   113   114   115