![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Lost_soul |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 16.9.2007 Репутация: нет Всего: нет |
Помогите,пожалуйста, ссделать такое задание:
Имеется N1 серверов которые обрабатывают заявки и N2 клиентов, которые производят заявки. Разработать программу, которая моделирует данную систему, при условии, что серверы и клиенты это отдельные потоки. Очередь заявок ограничена N3 элементами. Время, через которое производится заявка – это время из диапазона (Т1-Т2), время обработки заявки – из диапазона (Т3-Т4). заранее спасибо=) у меня была аналогичная задача,только там не шло речи о синхронизации. там была ситуация с кассами в банках, то есть нынешнюю задачу я понимаю так: потоки серверов...это конкретное число серверов(вводится пользователем N1),которые выполняют обработку заявки за время в диапазоне Т3-Т4(вводится). через время между Т1 и Т2(вводятся) появляются новые потоки-клиенты(их кол-во N2),которые подают заявку и она обрабатывается сервером. при этом есть общая очередь клиентов и очередь для каждого сервера(огрниченная количеством N3-вводится). когда закончатся клиенты-можно вывести отчет какой сервер сколько какого клиента обрабатывал....не знаю,на сколько это возможно... очень прошу помочь!хотя бы советом...не могу придумать,как всё это дело организовать=( зы компилятор C++ Builder 6.0 +прикрепляю файл с кодом про кассы. Присоединённый файл ( Кол-во скачиваний: 1 )
BANK.rar 3,54 Kb |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Организовать очень просто: 1) Клиенты и серверы просто потоки 2) Центральная часть системы - очередь запросов. 3) Количество элементов в очереди считается семафором (макс. значение семафора - N3) 4) Добавление и удаление элементов из очереди производится под контролем критической секции. Добавление заявки: 1) Захватывается критическая секция 2) Увеличение семафора на 1 (ReleaseSemaphore), если увеличение невозможно, то освобождение крит. секции, Sleep и все снова. 3) Добавляется заявка в очередь, 4) Освобождается критическая секция Обработка заявки: 1) Ожидание семафора 2) Захват критической секции 3) Извлечение заявки 4) Освобождение критической секции 5) Обработка заявки (Sleep на время из диапазона T3-T4) Все потоки серверов ждут на п1 из обработчика, потоки клиентов весят в Sleep и периодически просыпаясь шлют заявки. Имеет смысл добавить еще один Event для обеспечения корректного выключения всей системы, потоки серверов при этом должны ждать в п1 семафора или этого Event'а, при наступлении последнего они должны завершаться. Главный поток должен создать все синхронизирующие объекты, породить клиентов и серверов, и ждать окончания сессии (как его задаст пользователь), после чего он должен установить спец. переменную, по которой должны завершиться все клиентские потоки, затем установить Event, затем ждеть завершения всех потоков (клиентов и серверов), затем завершиться сам. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |