Page 134 - 6571
P. 134
Процедури реалізують видимі операції. Глобальні змінні є
спільними для усіх процедур тіла монітора. Вони називаються
глобальними, оскільки існують і зберігають свої значення увесь
час існування монітора. У процедурах існує можливість також
використовувати локальні змінні, копії яких створюються під час
кожного виклику функції.
Монітор як один із абстрактних типів даних володіє наступ-
ними трьома властивостями. По-перше, поза монітором видимі
тільки імена процедур, що представляють собою єдине «вікно»
оголошення монітора. Таким чином, щоб змінити стан ресурсу,
представлений глобальними змінними, процес повинен виклика-
ти одну із процедур монітора. Виклик процедури монітора має
наступний вигляд.
call mname.opname(arguments)
де: mname – ім’я монітора; opname – ім’я однієї із його операцій
(процедур), що може бути викликана з аргументами arguments.
Якщо ім’я opname унікальне в області видимості процесу, що
викликає процедуру, то частина « mname.» може бути опущена.
По-друге, оператори всередині монітора (в оголошеннях і
процедурах) не можуть звертатися до змінних, оголошених поза
межами монітора.
І по-третє, глобальні змінні ініціалізуються до виклику про-
цедур монітора, оскільки усі оператори ініціалізації виконуються
під час його створення.
Одна із найбільш привабливих властивостей монітора (в
принципі, як і будь-якого іншого абстрактного типу даних) – це
можливість його відносно незалежної розробки. Однак, це озна-
чає, що розробник монітора не знає заздалегідь порядку виклику
його процедур. Тому необхідне введення предикату, що буде іс-
тинним незалежно від порядку викликів процедур монітора. Інва-
ріантом монітора виступає предикат, що визначає «розумні»
стани глобальних змінних у випадку, коли процеси не звертають-
ся до них. Код ініціалізації монітора повинен створити стан, що
задовольняє інваріанту, а кожна процедура повинна його підтри-
мувати. Інваріант монітора аналогічний глобальному інваріанту,
але для змінних в межах одного монітора. Рядок інваріанта почи-
нається символами « ## ».
133