Блоки SEIZE и RELEASE. Занятие свободных приборов
В процессе перемещения по модели СМО транзакты занимают приборы (ОА). Для того, чтобы занять ОА, транзакт входит (или пытается войти) в соответствующий блок, описывающий этот прибор. Этот блок должен обладать следующими свойствами:
1. Если прибор уже используется (занят другим транзактом), транзакт не может войти в блок, и он должен ждать в очереди.
2. Если прибор не используется, транзакт может войти в блок. В результате произойдет изменение статуса прибора из «незанято» в «занято».
Для моделирования приборов подобного типа используется блок SEIZE. В результате входа транзакта в блок SEIZE указанное в нем устройство становится «занятым» данным транзактом и остается в этом состоянии до тех пор, пока этот же самый транзакт не пройдет через блок RELEASE, указывающий на это устройство. Один транзакт может занять любое число устройств, но каждое устройство в любой момент времени может быть занято лишь одним транзактом.
Для оператора SEIZE, использованного в программе, обязательно должен быть указан операнд А. Значением операнда А является имя занимаемого прибора. Имя прибора может быть символическим или числовым. Если прибору присваивается символическое имя, то оно должно состоять из трех-пяти алфавитно-цифровых символов, причем первые три символа должны быть буквами. Если прибору присваивается числовое имя, то числа должны быть положительными и целыми. Наибольшее разрешенное число приборов зависит от объема памяти, доступной системе GPSS.
В качестве операнда В оператора SEIZE могут быть указаны символы «Q» или «L». Символ «Q» используется в тех случаях, когда нужно, чтобы собиралась статистика о средней длине очереди или о среднем времени ожидания. Так, запись
SEIZE point,Q
означает, что очередь перед объектом «point» не будет создаваться, но в процессе моделирования будет собираться и раcпечатываться статистика. Если в качестве операнда В указан символ «L», то блок становится «логическим блоком» SEIZE. Это значит, что если прибор А занят, то транзакт проходит через этот блок. Он не ждет перед блоком, как обычно, пока освободится прибор.
Пример использования блока SEIZE:
SEIZE Stan1, Q ! Занять Stan1 (станок №1)
ADVANCE 10,5 ! Выполнить обработку
RELEASE Stan1 ! Освободить Stan1
SEIZE Stan2 ! Занять Stan2 (станок №2)
SEIZE Robot ! Занять робот
ADVANCE 14 ! Выполнить обработку
RELEASE Stan2 ! Освободить Stan2
RELEASE Robot ! Освободить робот
Прохождение транзактов через этот участок программы моделирует обслуживание заявок сначала прибором Stan1 в течение от 5 до 15 единиц времени, а затем одновременно двумя приборами Stan2 и Robot в течение 14 единиц времени.
При попытке освободить свободный прибор системой выдается сообщение об ошибке и процесс моделирования прерывается. То же самое происходит, если транзакт пытается освободить прибор, занятый другим транзактом.