БЛОКИ ДЛЯ ОБРАБОТКИ СООБЩЕНИЙ, ПРИНАДЛЕЖАЩИХ ОДНОМУ СЕМЕЙСТВУ
Блок SPLIT имеет следующий формат:
SPLIT A,[B],[C]
Блок SPLIT выполняет функцию копирования входящего в него сообщения, которое называется исходным или порождающим.
В поле А задается число создаваемых копий.
Поле В задает номер следующего блока, к которому переходят копии исходного сообщения, причем значение вычисляется для каждой копии отдельно.
В поле С может быть задан номер параметра, используемого для присвоения копиям последовательных номеров. Блок ASSEMBLE имеет следующий формат:
ASSEMBLE A
Блок ASSEMBLE объединяет заданное число сообщений, принадлежащих к одному семейству, в одно сообщение (т.е. осуществляет сборку заданного числа сообщений). После сборки из блока ASSEMBLE выходит только одно сообщение, которое переходит в следующий по номеру блок. В одном и том же блоке ASSEMBLE возможна одновременная сборка сообщений нескольких семейств. Когда сообщение входит в блок ASSEMBLE, интерпретатор просматривает семейство, к которому принадлежит это сообщение, и проверяет, есть ли другое сообщение из того же семейства в данном блоке ASSEMBLE. Поле А задает число сообщений, участвующих в сборке. Операнд А может быть именем, положительным целым, СЧА, СЧА*<параметр>. Первоначальное значение аргумента поля А не должно быть больше или равно единице. Если при входе исходного сообщения в блок ASSEMBLE, значение счетчика стало равным нулю (т.е. нужно было "объединить" только одно сообщение), сообщение немедленно покидает блок ASSEMBLE и переходит в следующий по номеру блок. Если результат отрицательный (вычисленное значение аргумента поля А нулевое или отрицательное), происходит ошибка выполнения. Обычно значение счетчика сборки больше единицы, поэтому при входе в блок ASSEMBLE исходного сообщения результат вычитания единицы из счетчика положительный. Этот результат (новое значение счетчика сборки) сохраняется, а исходное сообщение исключается из списка текущих событий и переходит в состояние синхронизации. Это сообщение не будет возвращено в список текущих событий до тех пор, пока в блок ASSEMBLE не войдет заданное число сообщений, и счетчик сборки не станет равным нулю. Блок GATHER имеет следующий формат записи:
GATHER A
Блок GATE накапливает заданное число сообщений, принадлежащих к одному семейству. Ни одно из накапливаемых сообщений не уничтожается. Когда в блоке GATHER накопится заданное число сообщений, все эти сообщения одновременно попытаются войти в следующий по номеру блок. Сообщения никогда не задерживаются на входе блока GATHER. Одновременно в одном блоке GATHER может происходить накопление сообщений нескольких семейств.
Поле А задает число сообщений, принадлежащих к одному семейству, которое нужно накопить. Блок MATCH имеет следующий формат:
MATCH A
Блок MATCH используется для синхронизации движения двух сообщений, принадлежащих к одному семейству, без удаления этих сообщений из модели. Блоки MATCH не объединяют синхронизируемые сообщения. Синхронизация осуществляется путем подбора пар сообщений из одного семейства и задержки этих сообщений до тех пор, пока оба сообщения из одной пары не поступят в заданные точки модели. Сообщения никогда не задерживаются в блоке MATCH. Сообщения, для которых выполнилось условие синхронизации, переходят к следующему по номеру блоку. В одной паре блоков MATCH могут одновременно находиться в состоянии синхронизации пары сообщений из различных семейств. Возможна также одновременная синхронизации пар сообщений из одного семейства в нескольких блоках MATCH.
Поле А задает имя или номер другого блока MATCH, называемого "сопряженным блоком MATCH". Если такого блока нет, происходит останов по ошибке. Операнд А может быть именем, положительным целым, СЧА, СЧА*<параметр>.
Допускается использование блока MATCH в качестве сопряженного самому себе. В этом случае блок MATCH действует как блок GATHER с начальным значением счетчика, равным 2. При входе сообщения в блок MATCH интерпретатор определяет номер блока, заданного в поле А, и затем просматривает семейство, к которому принадлежит вошедшее в блок MATCH сообщение.
Если для сообщения, вошедшего в блок MATCH, нет сообщения из того же семейства, находящегося в состоянии синхронизации в сопряженном блоке MATCH, то это сообщение удаляется из списка текущих событий и помещается в список синхронизации. Это сообщение не возвращается в список текущих событий до тех пор, пока другое сообщение из этого же семейства не войдет в сопряженный блок MATCH. Счетчики Nj и Wj блока увеличиваются на единицу. Индикатор синхронизации устанавливается в единицу, как в блоках ASSEMBLE и GATHER. Интерпретатор переходит затем к следующему сообщению из списка текущих событий.
Если в сопряженном блоке MATCH есть сообщение из того же семейства и оно находится в состоянии синхронизации, то индикатор синхронизации устанавливается в "0". Затем сообщение, которое находилось в сопряженном блоке MATCH, возвращается в список текущих событий, где оно становится последним среди сообщений с таким же значением приоритета. Тем временем интерпретатор продолжает обработку второго сообщения данной пары, вошедшего в рассматриваемый блок MATCH. Это сообщение обрабатывается так, как если бы оно проходило через блок ADVANCE с нулевой задержкой.
Опубликовал Kest
January 19 2010 20:39:21 ·
0 Комментариев ·
7036 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.