Russian Qt Forum
Ноябрь 25, 2024, 14:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSemaphores & QThreads помогите задачку решить  (Прочитано 2595 раз)
doom
Гость
« : Апрель 20, 2010, 10:23 »

Пусть Есть n пассажирских потоков и поток(QThread) автомобилей.
 Пассажиры ждут, чтобы сесть  в автомобиль и прокатится.  Автомобиль может содержать C пассажиров, где C <n. Автомобиль может поехать по кругу только тогда, когда он заполнен.

Ниже приведены некоторые дополнительные сведения:
• Пассажиры должны вызывать методы board и unboard.
• Автомобиль должнн вызывать методы load(нагрузки), run(запуска) и unload(выгрузки).
• Пассажиры не могут сесть в машину, пока  Автомобиль не вызывет метод load(нагрузки)
• автомобиль не может уехать пока  не наберет C пассажиров.
• Пассажиры не могут вызывать метод unboard пока автомобиль не вызывет метод unload(выгрузки).


Записан
garryHotDog
Гость
« Ответ #1 : Апрель 20, 2010, 17:01 »

Много писать не буду времени нет, простой вариант.

 -Автомобиль - поток т.к. есть run
 -Пассажир - поток
 -объвлены семафоры
 
Цитировать
Пассажиры должны вызывать методы board и unboard.
зедсь думую понятно - board,unboard - работаешь с семаформи автомобиля.
Цитировать
Пассажиры не могут сесть в машину, пока  Автомобиль не вызывет метод load(нагрузки)
1 . у класса автомобиля модно сделать флаг (bool) -bool m_canLoad - Этот флаг будет выставляться функцией load, пассажиры в потоке периодически (или по таймеру ) считываю переменную (чтение - потокобезопасная операция)
2. или реализовать с помощью сигналов\слотов, например CAvto::signal_load() ->CPass::slot_load();

второй вариант,думую, по проще
Цитировать
автомобиль не может уехать пока  не наберет C пассажиров.
1 . Класс автомобиля, после того как выставил флаг m_canLoad проверяет сколько "в него село " пассажиров.
2.  либо при посадке пассажир посылает сигнал, а класс автомобиля принимая его увеличивает счетчик, одновременно проверяя его
Цитировать
Пассажиры не могут вызывать метод unboard пока автомобиль не вызывет метод unload(выгрузки).
аналогично нагрузки
-----
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Апрель 20, 2010, 17:46 »

Хорошая задачка  Улыбающийся Раньше такие на GPSS давали
Нужен совет как сделать или просто списать?
Записан
doom
Гость
« Ответ #3 : Апрель 22, 2010, 13:20 »

Хорошая задачка  Улыбающийся Раньше такие на GPSS давали
Нужен совет как сделать или просто списать?

просто списать
у меня таких еще 5.
хотел бы по етому примеру остальные зделать.
заранее спасибо.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Апрель 22, 2010, 16:22 »

Attachment
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.044 секунд. Запросов: 23.