Помощь - Поиск - Пользователи - Календарь
Полная версия: Взаемодействие процессов методом "Почтового ящика"
Форум «Всё о Паскале» > Разработка ПО, алгоритмы, общие вопросы > Алгоритмы
rekrut

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

Если у кого есть код или кто знает как это сделать
буду рад услышать советы, а то не знаю даже с чего начать писать!!!
volvo
Цитата
а то не знаю даже с чего начать писать!!!
Для начала - прочитать, что вообще такое "почтовые ящики" (они же MailSlots), и подумать, каким образом они могут тебе помочь в функционировании твоего приложения. Синхронизация здесь вообще ни при чем, это метод межпроцессного взаимодействия, причем очень специфического, одностороннего...

P.S. Если не ошибаюсь, у Рихтера в "Создании эффективных Win32 приложений" было что-то про работу с mailslots, но сейчас книги под рукой нет...
rekrut
да матреиал у меня то есть вот например псевдокод по типу задания,
надо сделать именно моделирование системы, я вообще на пыхе собрался
это написать, там с ООП все в порядке должно получиться,
но вот с логикой не могу догнать как это все устроить лучше всего будет...

задание такое:
Написать програму, которая моделирует касу продажи авиабилетов.
Автомат приймає гроші (только одного выбраного номинала) и выдает сдачу соответственными купюрами.
Ввод запроса на продажу организуется с помощью выбора пункта меню:
0 – виключити автомат;
1 – купити білет до Києва вартістю 28.;
2 – купити білет до Москви вартістю 37;
3 – купити білет до Лондона вартістю 50;
4 – купити білет до Берлину вартістю 77;
5 – купити білет до Парижа вартістю 91.
Если сдачу видать можна, програма формирует нужный набор купюр (также корректирует банк купюр) и формирует сигнал на выдачу. Если купюр для здачи не хватает, делается соответствующее сообщение.
Запрос на выдачу денег приходят через случайные отрезки времени посля очередного обслуживания клиента (або отказа).
Автомат имеет 2 терминала («А» и «В»),которые работают независимо.
Модель автомата представить в выгляде 3 взаемодействующих процесов А, В, и С.
Процесы А и В определяют час прихода запроса на продажу, нужную суму здачи и переходят в состояние блокирования.
Процес С ожидает момент появления необходимости выдать сдачу и, если величина сдачи известна, определяет купюры или невозможность выдачи. Потом он активирует процес А или В (от кого пришел запрос), а сам ожидает на очередной запрос.
Для взаемодействия процесов использовать "почтовый ящик".

Приклад . Реалізація взаємних виключень з використанням повідомлень.


Код
const int n = //количество процесов;
void P (int n)
{
message msg;
while (true)
{
receive (mutex, msg);
// Критический раздел;
send (mutex, msg);
// Остальной код;
}
}
void main()
{
create_mailbox (mutex);
send (mutex, null);
parbegin (P(l),P(2),..-,P(n));
}

Вот тому кто не помнит что такое почтовые ящики немного материала:

1.Почтовые ящики
Если процесс Р1 хочет общаться с процессом Р2, Р1 просит систему образовать почтовый ящик, который свяжет эти два процесса так, чтобы они могли передавать друг другу сообщения. Для того, чтобы послать процессу Р2 какое-то сообщение процесс Р1 просто помещает это сообщение в почтовый ящик, откуда процесс Р2 может его в любое время взять. При применении почтового ящика процесс Р2 в конце концов обязательно получит сообщение, когда обратиться за ним, если вообще обратиться.

Почтовый ящик – это информационная структура, для которой задаются правила, описывающие ее работу. Она состоит из головного элемента, в котором находится описание данного почтового ящика, и из нескольких гнезд, в которые помещают сообщения. Размер каждого гнезда и количество гнезд, обычно задаются при образовании почтового ящика. Правила работы могут быть различными, в зависимости от сложности почтового ящика.
В простейшем случае, сообщения передаются только в одном направлении. Процесс Р1 может посылать сообщение до тех пор, пока имеются свободные гнезда. Если все гнезда заполнены, то процесс Р1 может либо ждать, либо заняться другими делами и попытаться послать сообщение позже.
Аналогично Р2 может получать сообщения до тех пор, пока имеются заполненные гнезда.
rekrut
неужели ни у кого нету мыслей даже, мне хотя бы структуру надо понять...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.