Блоки PREETMP и RETURN. Захват приборов обслуживания
С помощью блоков PREETMP и RETURN удобно описывается обслуживание с прерыванием, то есть такие ситуации, когда обслуживающий прибор временно прекращает обработку поступившей на него заявки и переходит на обслуживание «срочной» заявки. В это время замещенный (прерванный) транзакт либо может ждать, пока прибор не освободится вновь, либо может пойти куда-либо с намерением или без намерения вернуться впоследствии к прибору, с которого его сняли.
Транзакт может захватить прибор, только войдя в блок PREEMPT. Операнды этого блока и их значение показаны в табл. 3.2.
Таблица 3.2
Операнды оператора PREEMPT
Операнд | Значение | Значение по умолчанию |
А | Имя прибора, подлежащего захвату | Ошибка |
B | Необязательный операнд.Используется для указания условий,при которых разрешен захват. Существуют две возможности:
1. Операнд В используется. В нем должна стоять двухбуквенная последовательность PR. Тогда захват разрешен только в том случае, когда возможный захватчик имеет более высокий уровень приоритета. 2. Операнд В не используется. Тогда захват происходит, когда обслуживаемый транзакт сам не является захватчиком |
Транзакт, захвативший прибор, может освободить его (то есть возвратить прибор ранее прерванному транзакту) только при дальнейшем вхождении в блок RETURN. Операнд А этого блока указывает имя прибора, подлежащего освобождению.
Пример использования операторов PREEMPT и RETURN в программной конструкции:
simulate
generate 120,30,,,1
arrive newsq ! Встать в очередь
preempt sal ! Отнять прибор
depart newsq
advance 45,30
return sal ! Возвратить прибор
terminate 1
start 1
end