Page 140 - 6571
P. 140

ції signal, не побачить, що умова стала істинною і не припинить
                  очікування.
                        Лістинг 26 – Реалізація семафора FIFO з передачею умови

                        monitor FIFOsemaphore {
                          int s = 0; ## s>= 0
                          cond pos; # отримує сигнал, коли s > 0
                          procedure Psem() {
                            if (s == 0) wait(pos);
                            else s = s-1;
                          }
                          procedure Vsem() {
                            if (empty(pos))s = s+1;
                            elsesignal(pos);
                          }
                        }

                        Даний метод передачі умови можна використовувати скрізь,

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

                  s у процедурі Psem та її зменшення у процедурі Vsem.
                        З лістингів 25 та 26 можна побачити, що умовні змінні анало-
                  гічні операціям P та V у випадку використання семафорів. Опера-
                  ція wait, подібно операції P, призупиняє процес, а операція sig-

                  nal, як і операція V, відновлює його роботу. Однак існує дві істо-
                  тні  відмінності.  По-перше,  операція  wait  завжди  призупиняє

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

                  продукує жодних дій, якщо не існує процесів, призупинених на
                  умовній  змінній,  тоді  як  операція  V  або  запускає  призупинений
                  процес,  або  збільшує  значення  семафора,  тобто  стан  виконання

                  операції  signal  не  запам’ятовується.  Через  дані  відмінності
                  умовна синхронізація з використанням моніторів реалізується по
                  іншому ніж із семафорами.

                        Спочатку для моніторів був запропонований порядок «сигна-
                  лізувати і очікувати», однак SC був прийнятий в операційній сис-
                  темі Unix, мові програмування Java і бібліотеці Pthreads. Перевагу

                  було віддано порядку SC, оскільки він сумісний із плануванням
                  процесів на основі пріоритетів і має більш просту формальну се-
                  мантику.

                                                             139
   135   136   137   138   139   140   141   142   143   144   145