Page 136 - 6571
P. 136

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

                  клику методу
                        wait(cv);

                        Виконання  операції  wait  поміщає  робочий  процес  в  кінець

                  черги, що асоціюється із змінною cv. Для того щоб інший процес
                  зміг  увійти  в  монітор  з  метою  запуску  призупиненого  процесу,

                  операція wait скасовує винятковий доступ до монітора для про-
                  цесу, що її викликав.
                        Заблоковані  процеси  запускаються  операторами  signal
                  шляхом виклику методу

                        signal(cv);

                        Даний  метод  виконує  перевірку  черги  затримки  змінної  cv.

                  Якщо  у  черзі  знаходяться  призупинені  процеси,  то  оператор
                  signal запускає процес із «голови» черги. Таким чином, операції
                  wait та signal забезпечують порядок сигналізації FIFO.



                        15.3 Визначення порядку сигналізації


                        Виконуючи  операцію  signal,  процес  працює  в  моніторі  і,
                  отже,  може  керувати  блокуванням,  неявно  зв’язаним  із  моніто-

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

                  пущений нею на виконання. Проте, в подальшому може викону-
                  ватися  тільки  один  із  них  (навіть  у  випадку  мультипроцесорів),
                  оскільки лише один процес може мати винятковий доступ до мо-
                  нітора. Таким чином, можливі два варіанти виконання:

                        1) сигналізувати  і  продовжити.  Процес,  що  виконав  опера-
                  цію  signal  продовжує  роботу,  а  процес,  який  отримав  сигнал,

                  виконується після нього;
                        2) сигналізувати і очікувати: Процес, що виконав операцію
                  signal очікує певний проміжок часу, а процес, який отримав си-
                  гнал, виконується відразу.

                        Дисципліна  (порядок)  «сигналізувати  і  продовжити»  не
                  перериває обслуговування. Процес, що виконує операцію signal,


                                                             135
   131   132   133   134   135   136   137   138   139   140   141