Создание копий транзактов. Блок SPLIT




 

Кроме блока GENERATE, для создания транзактов может использоваться блок SPLIT (РАЗДЕЛИТЬ), который выполняет функцию копирования транзакта, входящего в него. Этот транзакт называется начальным или порождающим. Все копии формируются в момент входа начального транзакта в блок SPLIT. Каждая новая копия становится членом семейства (ансамбля) транзактов, порожденных одним начальным транзактом, который был создан блоком GENERATE.

Формат блока SPLIT:

SPLIT <A>[,<B>][,<C>]

 

Поля операндов имеют следующий смысл:

­ <A> – число создаваемых копий транзакта,

­ <B> – метка блока, к которому направляются копии,

­ <C> – параметр, в котором запоминаются номера копий транзактов.

 

Операнд <А> может быть положительным целым, СЧА. Если вычисленное значение операнда <А> равно нулю, блок SPLIT не выполняет никаких операций. После создания копий начальный транзакт пытается перейти к очередному блоку.

Операнд <В> задает блок, в который переходят копии начального транзакта. Операнд может быть именем (меткой), положительным целым, СЧА (в двух последних случаях операнд <В> задает номер блока). Значение операнда <В> вычисляется для каждой копии отдельно.

Операнд <C> задает параметр транзакта, который используется для присвоения копиям последовательных номеров. Операнд <C> может быть именем, положительным целым, СЧА.

Транзакты, принадлежащие одному семейству, объединяются интерпретатором в список. По связям внутри семейства транзактов невозможно установить, какой из транзактов семейства является начальным. Если копия транзакта входит в блок SPLIT, то повторная копия становится членом того же семейства, что и первичная копия. Таким образом, каждый транзакт является членом одного и только одного семейства. Семейство может состоять из произвольного числа транзактов. Когда транзакт уничтожается, интерпретатор автоматически исключает его из членов соответствующего семейства. Таким образом, семейство существует до тех пор, пока из модели не удалится последний из его членов.

В модели одновременно может присутствовать произвольное число семейств, оно все время меняется, поскольку каждый транзакт, генерируемый блоком GENERATE, может создать свое семейство.

 

ПРИМЕР 25.

SPLIT 1,MET

ADVANCE 10

MET SEIZE CHAN

Основной транзакт, порождающий копию, переходит в блок ADVANCE, а транзакт-копия переходит к блоку с меткой MET.

 

 

Синхронизация движения транзактов. Блоки MATCH, ASSEMBLE, GATHER

 

Для синхронизации движения транзактов, принадлежащих одному семейству, используются блоки MATCH (СОГЛАСОВАТЬ), ASSEMBLE (СОБРАТЬ), GATHER (СОЕДИНИТЬ).

Блок MATCH синхронизирует движение транзактов c другим блоком MATCH.

 

Формат блока MATCH:

MATCH <A>

 

Операнд <А> указывает имя сопряженного блока. Сопряженным блоком является также блок MATCH.

 

ПРИМЕР 26.

В локальной сети рабочая станция опрашивается каждые 30 мс. Если на рабочей станции есть сообщение для передачи, то оно занимает канал.

MET1 MATCH MET2

SEIZE CHAN

MET2 MATCH MET1

ADVANCE 30

При входе транзакта-сообщения в блок MATCH c меткой MET1он будет ждать (в списке синхронизации) момента, когда другой опрашиваемый транзакт, принадлежащий тому же семейству, не войдет в сопряженный блок MATCH c меткой MET2. Только после этого сообщение займет канал CHAN, a опрашиваемый транзакт перейдет в блок ADVANCE.

 

Блок ASSEMBLE собирает начальный транзакт и все транзакты-копии из одного семейства, удаляет копии и выдает один начальный транзакт. После сборки из блока ASSEMBLE выходит только один транзакт, который переходит в следующий по номеру блок.

 

Формат блока ASSEMBLE:

ASSEMBLE <A>

 

Операнд <А> задает счетчик сборки, указывающий сколько членов одного семейства должны быть объединены. Операнд <А> может быть именем, положительным целым, СЧА. Первоначальное значение операнда <А> должно быть больше единицы.

 

Блок GATHER скапливает заданное количество транзактов, принадлежащих одному семейству. Он задерживает их до тех пор, пока не соберется необходимое число, указанное операндом <А>. Затем накопленные транзакты одновременно попытаются войти в следующий по номеру блок.

 

Формат блока GATHER:

GATHER <A>

Операнд <А> задает число транзактов, принадлежащих к одному семейству, которое нужно накопить. Операнд <А> может быть именем, положительным целым, СЧА.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2021-01-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: