Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МиАПО / SIMC_dorab.doc
Скачиваний:
13
Добавлен:
07.02.2016
Размер:
756.22 Кб
Скачать

2.2 Уничтожение транзактов

Транзакты, завершившие свое продвижение по модели, покидают ее, проходя через функцию void destroy(). Фактически эта функция помещает транзакт, на которой указывает ссылкаtrans, в списокdelist.

Пример 2.1. Уничтожение транзакта в событии номер 12.

#include "simc.h"

voidmain() {

...;

while(systime<1000) {

plan();

switch(sysevent) {

...: ...;

case 12: destroy(); break; Уничтожение транзактов

...: ...

}

}

}

printall();

}

2.3 Продвижение транзактов

Транзакты могут продвигаться в модели только в моменты осу­ществления событий. Любой транзакт в модели движется от функции createк функцииdestroy. Обращений и к тем, и к другим функциям в системе может быть несколько. Любые параллельные процессы в модели осуществляются последовательно (их можно синх­ронизировать), поэтому в любой момент выполнения программы может продвигаться только один транзакт.

Если в некоторый момент модельного времени началось продви­жение транзакта, то он перемещается по модели (без увеличения модельного времени) от события к событию до тех пор, пока не встретит одну из функций: destroy,delayt,wait,seize,infac,enterили функции, помещающие транзакт в список пользователя.

Первые две безусловно прекращают продвижение транзакта, ос­тальные - в зависимости от наступления указанного в функции события (wаit) или в зависимости от состояния занятости указан­ных в функциях устройств (seize, infac, enter).

Последовательность действий при выполнении события произ­вольная, однако следует помнить, что указанные функции могут устанавливать trans=nil(delayt,destroy- всегда устанавлива­ют) и временно выводить транзакт из числа активных (способных продвигаться в модели в данный момент модельного времени при данном состоянии системы). Единственная функция -delayt- точно устанавливает значение модельного времени новой активации транзакта. Момент активации транзактов, прошедших через функцииdestroy,wait,seize,infac,enterзависит от последующего поведения модели.

2.4 Задержка транзактов. Функцияdelayt

Если значение модельного времени (systime==c), а время задерж­ки в функцииvoid delayt(double) равноr, то транзакт помещается в списокfuture, а время выхода транзакта из списка равняетсяr+c. Раз­мещение транзактов в спискеfutureосуществляется в порядке возрастания времен выхода. Если в списке несколько транзактов имеют одинаковое время выхода, то эти транзакты размещаются в порядке убывания их приоритетов. Транзакты с одинаковыми приори­тетами и временами выхода размещаются в порядке их поступления в список.

Пример 4.1. Модель с простейшим случаем задержки.

#include "simc.h"

void main() {

...;

initcreate(1,0);

...;

while(systime<1000) {

plan();

switch(sysevent) {

case1:create(40);break;

...: ...;

case10:delayt(50);break; // задержать транзакт на 50 единиц модель­ного времени

...: ...;

case 12: destroy(); break;

}

}

printall();

}

Пример 4.2. Задержка транзакта на время, экспоненциально распределенное с µ=4.0

#include "simc.h"

voidmain() {

...;

while(systime<2500) {

plan();

switch(sysevent) {

...: ...;

case 42: delayt(randexp(4.0,v1)); break;

...: ...

}

}

printall();

}

Соседние файлы в папке МиАПО