Page 109 - 6571
P. 109

V(s): < s = s+1; >

                  Операція  V  збільшує  значення  s  на  одиницю  неподільним

            чином.  Операція  P  зменшує  значення  s,  але  перед  тим  вона
            спочатку очікує, поки значення s не стане позитивним.

                  Призупинення виконання процесу і операція віднімання в P є
            єдиною  неподільною  дією.  Припустимо,  що  s  –  семафор  з
            поточним  значенням  1.  Якщо  два  процеси  намагаються

            одночасно  виконати  операцію  P(s),  то  це  вдасться  зробити
            тільки  одному  із  них.  Але  якщо  один  процес  намагається
            виконати  операцію  P(s),  а  інший  –  V(s),  то  обидві  операції

            будуть                      успішно                        виконані                       в
            непередбачуваному  порядку,  а  кінцевим  значенням  семафора  s
            стане 1.

                  Звичайний  семафор  може  приймати  будь-які  невід’ємні
            значення,  двійковий  семафор  –  тільки  значення  1  або  0.  Це
            означає,  що  операція  V  для  двійкового  семафора  може  бути

            виконана,  тільки  коли  його  значення  рівне  0.  Операцію  V  для
            двійкового семафора можна визначити як процедуру очікування,
            доки  значення  семафора  стане  меншим  1,  а  потім  збільшення

            його значення на 1.
                  Оскільки  операції  з  семафором  визначаються  в  термінах
            операторів          await,        їх     формальна          семантика         випливає

            безпосередньо із застосування правила оператора await. Правила
            виводу  для  операцій  P  та  V  виходять  безпосередньо  з  правила
            оператора  await,  застосованого  до  конкретних  операторів  у

            визначенні P та V.


                  13.2 Основні задачі та методи семафорів


                  Семафори безпосередньо підтримують реалізацію процедури

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

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

                  1. Задача критичної секції (взаємне виключення). Нагадаємо,
            що в задачі критичної секції кожен з n процесів багаторазово ви-

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