Page 108 - 6571
P. 108

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

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

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

                  опрацьовується  тільки  двома  неподільними  операціями  P  та  V.
                  Семафор можна вважати екземпляром класу Semafor, а операції
                  P  та  V  –  методами  цього  класу  з  додатковим  атрибутом,  що

                  визначає їх неподільність.
                        Значення  семафора  є  додатним  цілим  числом.  Операція  V
                  використовується  для  сигналізації  про  те,  що  подія  відбулася,

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

                  його.  Потужність  використання  семафорів  обумовлена  тим,  що
                  виконання  операції  P  може  бути  призупинено  у  будь-який
                  момент часу.

                        Семафор оголошується наступним чином:
                        sem s;

                        За  замовчуванням  початковим  значенням  семафора  є  0,  але

                  семафор можна ініціалізувати будь-яким позитивним значенням,
                  наприклад:

                        sem lock = 1;

                        За необхідності можна оголошувати та ініціалізувати масиви
                  семафорів:

                        sem forks[5] = ([5] 1);

                        Після оголошення та ініціалізації семафор можна обробляти

                  тільки за допомогою операцій P та V. Кожна з них є неподільною
                  дією з одним аргументом. Нехай s – семафор. Тоді операції P(s)
                  та V(s) визначаються наступним чином.

                        P(s): < await (s > 0) s = s-1; >


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