![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
fromrus |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 30.3.2008 Репутация: нет Всего: нет |
Нужно реализовать работу спящего парикмахера...Перерыл по инета-все на жаве или не то что нуна...
Вывод должен быть такой: "Клиент 1 пришел. Клиент 1 разбудил парикмахера Клиент 1 обслуживается... клиент 2 пришел Клиент 2 ждет... Клиент 3 пришел Клиент 3 ушел,нет свободного места Клиент 1 подстригся и ушел Клиент 2 обслуживается..." и так далее вот что надумал:
далее в классе Клиент я блокирую к нему доступ через lock:
ну и в Main я через Timer модулирую рандомный приход клиентов:
И вотпроблемы: как обеспечить "сон" парикмахера...Что-то подсказывает что нуна исполбзовать WaitHandle,но как-не додумался...Как обеспечить правильные номера клиентов-тут меня прям переклинило.... Возможн ли использовать semaphore вместо bool serving,чтобы вывод ыл такой же? |
||||||
|
|||||||
MasterOfCode |
|
|||
![]() elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
А как ты описываешь состояние парикмахера, булевой переменной?
Добавлено через 2 минуты и 13 секунд еще, наверное, необходима переменная времени описывающая кол-во времени которое готов ждать клиент. поистечении которого просто гасить поток с клиеном и в консоле фиксировать его уход. -------------------- ![]() |
|||
|
||||
fromrus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 30.3.2008 Репутация: нет Всего: нет |
1.да только этой переменной 2.То что ты сказал можно реализовать через Семафор.WaitOne()-там одна из перегрузок такая есть...Но тогда становится не нужен учет кол-во свободных стульев и как результат к парикмахеру может прийти хоть 100 клиентов...Не покатит... |
|||
|
||||
MasterOfCode |
|
|||
![]() elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
Ну а в чем проблема, если у парикмахера может быть 2 состояния: спит и работает, то true, false у свойства. ![]() Дак и так, разве к парикмахеру может придти только определённое кол-во людей. По моему стульями неограничено. Например 31 августа. Представляешь сколько народу в парикмахерской. И все стоят ждут. ![]() Я бы тут реализовал просто таймер на то какое кол-во способен ждать той или иной клиент. -------------------- ![]() |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
кстати очередь тоже можно реализовать..и каждый стоит ждет столько сколько может. но ведь еще все зависит от того сколько перед ним народу..человек должен примерно расчитать, если перед ним стоит 20 человек а у него 5 минут на ожидание он должен сразу уйти..
|
|||
|
||||
MasterOfCode |
|
|||
![]() elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
Логично! ![]() -------------------- ![]() |
|||
|
||||
MasterOfCode |
|
|||
![]() elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
Но так же тогда нужно ввести коэффициент необходимости стрижки. Тогда человеку неважно сколько перед ним человек, он будет ждать все время которое у него в параметре.
например коэффициент необходимости qNeed in {0.01 .. 1} тогда кол-во человек в очереди которое он готов ждать cPeopleWait = (qNeed * TimeWait))/cPeople, где TimeWait = время ожидаиня, qNeed - коэффициент необходимости, cPeople - кол-во человек в очереди. cPeopleWait - если больше cPeople то остается ждать. например человеку необходимо подстричся любым способом, притом у него есть всего 20 минут до поезда, к примеру. qNeed = 1, TimeWait = 20 минут. Заходит в парикмахерскую, там 3 человека. получаем (1 * 20)/3 = 6.6 остается ждать. Другой пример. Человеку необходимо подстричься к завтрашнему дню, а через час начинается матч. qNeed = 0.5, TimeWait = 60 минут. Заходит в парикмахерскую, там 5 человек. получаем (0.5 * 60)/5 = 6 остается ждать. ![]() -------------------- ![]() |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
MasterOfCode тут еще встает вопрос о там до скольких работает парихмахер...возьмем к примеру клиента у которого qNeed зашкаливает..надо ему постричся позарез, а тут как назло очередь из 80 человек, и успеют они постричся только через 12 часов..а там либо дата смениться (ему то нужно сегодня) либо просто парикмахерская закроется (или такого нету?)
кстати возможность пройти по блату без очереди предусмастивается? ![]() |
|||
|
||||
MasterOfCode |
|
|||
![]() elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
Тут наверное нужно сравнить время TimeWait и ввести новую переменную о том во сколько заканчивает работу парикмахер например TimeWorkBarber, если TimeWait > TimeWorkBarber тогда уходить клиенту. если нет, то производить расчет по формуле. ![]()
Я думаю нужно предусмотреть, как минимум 1 раз в 2 дня у парикмахера такой "клиент" появляется -------------------- ![]() |
|||
|
||||
mihryak |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
Систему автоматизации парикмахерских решили замутить?
![]() Я подобную задачу решил таким способом (очень кратко опишу): - Есть Operation, в такой постановке это будет лохматый клиент - Есть WorkThread, представляющая из себя парикмахера, в нём реализован бесконечный цикл с возможностью аборта Суть работы такова - обрабатывается клиент, через AutoResetEvent парикмахер засыпает до следующего. - Есть ThreadPool, здесь это штат парикмахеров с заранее определённым максимальным числом. При появлении нового клиента будится заснувший парикмахер, либо берётся (создаётся) ещё незадействованный. Если все заняты, а клиент уже зашёл, Пул ругается менеджеру очереди (см. ниже). - Есть менеджер очереди, который встречает клиентов, сортирует их при добавлении по важности (приоритетам), отдаёт их Пулу на подстигание. Самая ответственная часть - обеспечить взаимодействие всех этих слоёв. Я это сделал через эвенты - парикмахер сообщает пулу, что он закончил, пул сообщает очереди, что есть свободные слоты. Мне не шибко нравится такое решение, общая схема выглядит довольно громоздко, но позволяет использовать, например, только операции и рабочие поток безо всяких пулов и очередей, или пул без очереди. |
|||
|
||||
fromrus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 30.3.2008 Репутация: нет Всего: нет |
Система автоматизации парикмахерких покатит и на startUP
![]() to mihryak твоя система действительно слишком большая...У мя тока 1 парикмахер,и нет надобности в системе управления... ![]() ![]() ![]() |
|||
|
||||
teesync |
|
|||
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 26.7.2022 Репутация: нет Всего: нет |
Модератор: Сообщение скрыто. |
|||
|
||||
squilia |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 15.8.2022 Репутация: нет Всего: нет |
Модератор: Сообщение скрыто. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |