|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.01.2014, 23:01 | #1 |
Регистрация: 25.10.2013
Сообщений: 5
|
Ошибки в задаче о парикмахере в делфи
Извиняюсь если тема уже не актуальная, и находится не там где нужно. У меня есть программка на делфи, но она не совсем корректно работает. Как только запускаю программу клиентов нет в парикмахерской, а парикмахер уже стрижет, его будят и спит. Помогите это исправить. В программе использую семафор и потоки.
Условия задачи такие: Имеется парикмахерская с двумя дверями и несколькими креслами. Посетители входят в одну дверь и выходят через другую. Парикмахер всю жизнь обслуживает клиентов. Когда клиентов нет, он спит в своем кресле. Когда посетитель приходит в салон и видит спящего парикмахера, он будит его, садится в кресло и спит, пока тот занят стрижкой. Если во время стрижки приходит еще один клиент, он садится в одно из свободных кресел и засыпает. Если свободных мест нет, клиент уходит. После стрижки парикмахер открывает клиенту выходную дверь и закрывает ее за ним. Если есть ожидающие посетители, парикмахер будит одного из них и ждет, пока тот сядет в кресло, после чего стрижет его. Код программы: Код:
________ Код нужно оформлять по правилам: тегом [CODE]..[/СODE] (это кнопочка на панели форматирования с решёточкой #) Не забывайте об этом! Модератор. Последний раз редактировалось Serge_Bliznykov; 10.01.2014 в 23:33. |
11.01.2014, 16:42 | #2 |
Старожил
Регистрация: 26.04.2008
Сообщений: 2,645
|
Не совсем верно построен алгоритм.
И ещё, ИМХО, показывать как спят клиенты или как их будят в 3-ем потоке излишне, т.к. это иллюстрация для WaitForSingleObject и ReleaseSemaphore в том потоке, который отвечает за очередь в парикмахерской. Можно создать всего 2 потока (очередь и парикмахер). Немного упростив получим следующее Код:
|
11.01.2014, 21:15 | #3 |
Регистрация: 25.10.2013
Сообщений: 5
|
Спасибо за помощь. Подскажите еще как сделать что бы посетители будили парикмахера. Заранее спасибо
|
11.01.2014, 22:56 | #4 |
Старожил
Регистрация: 26.04.2008
Сообщений: 2,645
|
ReleaseSemaphore(sem2,1,nil); - вот он будильник парикмахера. Тут даже 5 будильников, которые прикреплены к креслу. Как только посетитель садится на кресло, то сразу включает будильник, даже если парикмахер не спит. Так посетители приманивают цирюльника к себе. После пострижки парикмахер выключает один из будильников. И ложится спать только тогда, когда все кресла опустели и будильники отключены.
Или же нужно визуализировать пробуждение? UPD, можно примерно так (синхронизировать vcl самостоятельно) Код:
Последний раз редактировалось eoln; 11.01.2014 в 23:27. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Исправте ошибки в задаче | саша аврамов | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 07.02.2013 23:47 |
ошибки в задаче. какие? | Olgaandsasha | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 05.12.2011 08:04 |
Решите ошибки в задаче! | Ivanito | Общие вопросы C/C++ | 5 | 16.10.2009 20:55 |
помогите исправить ошибки в задаче на С++ | Wia | Помощь студентам | 4 | 14.12.2008 16:09 |