Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Блок TEST описывает условие, которое проверяет при входе в него транзакт, и определяет номер следующего блока для вошедшего транзакта в зависимости от того, выполняется требуемое условие или нет. Блок TEST функционирует в двух режимах: 1) отказа во входе; 2) разрешении во входе и альтернативном выходе.
Формат записи:
TEST X A, B, (C)
Операнды А и В являются сравниваемыми величинами. Они могут быть именем, строкой, выражением в скобках, СЧА. Условный оператор Х может быть выражен одним из следующих 6 условных операторов: L-меньше, LE-меньше или равно, E-равно, NE-не равно, G-больше, GE-больше или равно.
Если операнд С указан, транзакт всегда может войти в блок TEST и в зависимости от соотношения операндов будет передан либо в следующий блок, либо в блок, указанный операндом С. Если операнд С не указан, транзакт при невыполнении условия не сможет войти в блок TEST (режим отказа). Он помещается в список повторных попыток всех объектов, участвующих в проверке условия. Когда состояние любого из этих объектов изменяется, транзакт из списка повторных попыток активизируется и проверка проводится вновь. Если условие выполняется, транзакту разрешается войти в блок TEST.
При функционировании блока TEST в режиме отказа, возможно увеличение машинного времени на многократные проверки блокирующего условия. Сократить это время можно с помощью блоков LINK и UNLINK.
В булевой переменной может использоваться СЧА F, равный 1, если ОКУ занято, в противном случае – 0.
А также следующие СЧА ОКУ: 1) FC-количество транзактов, занимавших ОКУ с помощью блоков SEIZE и PREEMPT; 2) FR-коэффициент использования ОКУ; 3) FT-среднее время обслуживания ОКУ одного транзакта.
Пример использования булевой переменной и блока TEST для проверки состояния ОКУ.
Prov BVARIABLE F$Server
...........
TEST E BV$Prov, 0, PotZap
SEIZE Server
ADVANCE P$Obrab
RELEASE Server
В данном примере при входе транзакта в блок TEST вычисляется булева переменная Prov. В булевой переменной использован СЧА ОКУ F. Если ОКУ с именем Server занято, значение переменной Prov равно 1. Тогда, условие, заданное блоком TEST, не выполняется, так как 1 не равно 0, и транзакт не может занять ОКУ, а переходит к блоку с меткой PotZap, указанной операндом С. Если же ОКУ с именем Server свободно, то булева переменная Prov равна 0. Тогда проверяемое блоком TEST условие выполняется, транзакт переходит к следующему блоку, т. е. Занимает ОКУ с именем Server.
Дата публикования: 2015-02-03; Прочитано: 245 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!