IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Синхронизация потоков(winapi), C++
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


Помогите,пожалуйста, ссделать такое задание:

Имеется N1 серверов которые обрабатывают заявки и N2 клиентов, которые производят заявки.
Разработать программу, которая моделирует данную систему, при условии, что серверы и клиенты это отдельные потоки.
Очередь заявок ограничена N3 элементами. Время, через которое производится заявка – это время из диапазона (Т1-Т2), время обработки заявки – из диапазона (Т3-Т4).

заранее спасибо=)

у меня была аналогичная задача,только там не шло речи о синхронизации.
там была ситуация с кассами в банках, то есть нынешнюю задачу я понимаю так:
потоки серверов...это конкретное число серверов(вводится пользователем N1),которые выполняют обработку заявки за время в диапазоне Т3-Т4(вводится).
через время между Т1 и Т2(вводятся) появляются новые потоки-клиенты(их кол-во N2),которые подают заявку и она обрабатывается сервером.
при этом есть общая очередь клиентов и очередь для каждого сервера(огрниченная количеством N3-вводится).
когда закончатся клиенты-можно вывести отчет какой сервер сколько какого клиента обрабатывал....не знаю,на сколько это возможно...

очень прошу помочь!хотя бы советом...не могу придумать,как всё это дело организовать=(

зы
компилятор C++ Builder 6.0
+прикрепляю файл с кодом про кассы.


Прикрепленные файлы
Прикрепленный файл  BANK.rar ( 3.54 килобайт ) Кол-во скачиваний: 96


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Tribunal, у тебя же уже есть логика работы программы.

Что касается потоков: создаешь несколько потоков - "серверов", общую очередь "клиентов" (можешь пользоваться либо тем классом TQueue, который есть в приведенной тобой программе, либо стандартным std::queue), заполняешь ее несколькими "клиентами" сразу же. Через промежутки времени между T1 и T2 добавляешь в очередь очередного "клиента". Поток-"сервер" должен периодически (когда в его собственной очереди меньше, чем N3 "клиентов") опрашивать наличие "клиентов" в общей очереди, если она не пуста - то "изымать" очередного клиента из общей очереди (здесь не забываем о том, что обращаться к общим данным надо с использованием критических секций, см. EnterCriticalSection/LeaveCriticalSection) и помещать его в свой буфер, а по окончании обработки заявки предыдущего "клиента" - "изымать" нового клиента уже из своей очереди и обрабатывать его заявку в течении времени от T3 до T4. Здесь уже нет необходимости работать с критическими секциями, поскольку к собственной очереди "сервера" никто другой доступа не имеет... Статистику можно накапливать здесь же, у "сервера", подсчитывая число и время обслуживания клиентов.

Как только очередь "клиентов" пуста - можно удалять потоки-"серверы", для которых закончилась собственная очередь... Перед удалением "сервера" его можно заставить передать всю статистику, например, в Memo основной формы, опять же не забывая о синхронизации - чтобы не было попыток одновременной записи из разных потоков...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


не получается=(
просто технически не получается...=(
по идее клиенты-тоже потоки...нужно создавать очередь потоков? о_О
значит когда клиенты переходят из общей очереди в очередь сервера, тоже нужно использовать EnterCriticalSection/LeaveCriticalSection ...
помогите,пожалуйста, ещё... хотя бы какой-то набросок...
ссображаю плохо че-то=( помогите...мне просто эта программа уже срочно нужна...


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
по идее клиенты-тоже потоки...
А вот это - непонятно... Зачем клиенту быть потоком, а не просто классом/записью (я не сказал, что не получится реализовать с потоками, я просто идею саму не понимаю).
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


я тоже не понимаю=(
так что?подбросите ещё подсказок? rolleyes.gif


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 30.09.2020 7:36
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name