интересно
Предыдущая | Содержание | Следующая

Модель стоянка маршрутного такси

Задача взаимного исключения возникает в следующих случаях:

при создании сложных программных мультипроцессных средств;

для моделирования логики экономического (логистического) процесса

Ниже рассмотрено практическое решение такой задачи средствами Pilgrim на примере имитационной модели Стоянка маршрутного такси.

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

Принцип работы узла delet: вошедший в него транзакт семейства такси становится транзактом семейства пассажиры, входящие следом. Как только в узел войдет заданное количество транзактов-пассажиров, они поглотятся, а транзакт тележка переходит в следующий узел; транзакты, собранные в нее, перестают существовать как заявки на обслуживание в системе. Параметры модели представлены в табл. 8.1.

Опишем работу модели. Генератор 7 (рис. 8.3) создает транзакты, имитирующие пассажиров. Интервал прихода пассажиров в соответствии с теоремой о суперпозиции потоков событий имеет

экспоненциальное распределение. Интервал генерации транзактов, имитирующих такси, имеет нормальное распределение (обоснование: маршрут такси состоит из множества отрезков, поэтому имеют место условия центральной предельной теоремы, даже если на маршруте несколько машин). Использование в описании генератора 8 нормального закона распределения интервала генерации означает, что время между приездами такси на остановку чаще оказывается ближе к своему среднему значению и реже - дальше от него (чем больше отклонение интервала от среднего, тем реже это бывает).

Узлы 1 и 5 имитируют соответственно очереди пассажиров и такси. Ключ 6 в начале работы модели находится в открытом состоянии (по умолчанию), а ключ 2 закрывается при приходе в очередь 1 первого транзакта-пассажира. Это делается для того, чтобы в узел delet первым вошел транзакт-такси, а не пассажир (иначе пассажир станет тележкой).

Как только в delet войдет первый транзакт-такси, ключ 6 закрывается, а ключ 2 одновременно с ним открывается. Теперь выходящие из генератора 6 транзакты-такси стоят в очереди 5, а транзакты-пассажиры заходят в узел delet (идет заполнение такси). Когда в узле delet накопятся 10 транзактов-пассажиров, транзакт-такси перейдет в терминатор (заполненное такси уедет). После этого ключ 6 открывается, чтобы в delet мог зайти следующий транзакт-такси, а ключ 2 в это же время закрывается, чтобы транзакты-пассажиры стояли в очереди 1 до прихода в delet транзакта-такси.

Таким образом, ключи 2 и 6 в модели всегда находятся в противоположных состояниях: если один открыт, то другой закрыт. Тем самым чередуется доступ к узлу delet разных типов транзактов -такси и пассажиров.

Рассмотренный принцип тележки позволил эффективно решить задачу взаимного исключения и координации процессов производитель-потребитель.

Текст модели в комментариях не нуждается:

Нетрудно заметить, что в модели нет ни одного узла обслуживания (узлов типа serv или ргос с ненулевым временем обслуживания), но в очередях могут возникать существенные задержки.