Russian Qt Forum

Qt => Общие вопросы => Тема начата: doom от Апрель 20, 2010, 10:23



Название: QSemaphores & QThreads помогите задачку решить
Отправлено: doom от Апрель 20, 2010, 10:23
Пусть Есть n пассажирских потоков и поток(QThread) автомобилей.
 Пассажиры ждут, чтобы сесть  в автомобиль и прокатится.  Автомобиль может содержать C пассажиров, где C <n. Автомобиль может поехать по кругу только тогда, когда он заполнен.

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




Название: Re: QSemaphores & QThreads помогите задачку решить
Отправлено: garryHotDog от Апрель 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(выгрузки).
аналогично нагрузки
-----


Название: Re: QSemaphores & QThreads помогите задачку решить
Отправлено: Igors от Апрель 20, 2010, 17:46
Хорошая задачка  :) Раньше такие на GPSS давали
Нужен совет как сделать или просто списать?


Название: Re: QSemaphores & QThreads помогите задачку решить
Отправлено: doom от Апрель 22, 2010, 13:20
Хорошая задачка  :) Раньше такие на GPSS давали
Нужен совет как сделать или просто списать?

просто списать
у меня таких еще 5.
хотел бы по етому примеру остальные зделать.
заранее спасибо.


Название: Re: QSemaphores & QThreads помогите задачку решить
Отправлено: Igors от Апрель 22, 2010, 16:22
Attachment