Взаемодействие процессов методом "Почтового ящика" |
Взаемодействие процессов методом "Почтового ящика" |
rekrut |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 23 Пол: Мужской Реальное имя: vovadj Репутация: 0 |
Собственно дали задание на Курсач , написать програму: "Терминал продажи авиабилетов" используя метод почтового ящика для синхронизации процессов, собственно в самой работе надо это все смоделировать, язык подойдет любой. Если у кого есть код или кто знает как это сделать буду рад услышать советы, а то не знаю даже с чего начать писать!!! |
volvo |
Сообщение
#2
|
Гость |
Цитата а то не знаю даже с чего начать писать!!! Для начала - прочитать, что вообще такое "почтовые ящики" (они же MailSlots), и подумать, каким образом они могут тебе помочь в функционировании твоего приложения. Синхронизация здесь вообще ни при чем, это метод межпроцессного взаимодействия, причем очень специфического, одностороннего... P.S. Если не ошибаюсь, у Рихтера в "Создании эффективных Win32 приложений" было что-то про работу с mailslots, но сейчас книги под рукой нет... |
rekrut |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 23 Пол: Мужской Реальное имя: vovadj Репутация: 0 |
да матреиал у меня то есть вот например псевдокод по типу задания,
надо сделать именно моделирование системы, я вообще на пыхе собрался это написать, там с ООП все в порядке должно получиться, но вот с логикой не могу догнать как это все устроить лучше всего будет... задание такое: Написать програму, которая моделирует касу продажи авиабилетов. Автомат приймає гроші (только одного выбраного номинала) и выдает сдачу соответственными купюрами. Ввод запроса на продажу организуется с помощью выбора пункта меню: 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 - |
rekrut |
Сообщение
#4
|
Новичок Группа: Пользователи Сообщений: 23 Пол: Мужской Реальное имя: vovadj Репутация: 0 |
неужели ни у кого нету мыслей даже, мне хотя бы структуру надо понять...
|
Текстовая версия | 22.12.2024 8:51 |