Потоконезависимые очереди, реализация |
Здравствуйте, гость ( Вход | Регистрация )
Потоконезависимые очереди, реализация |
AD |
9.11.2011, 17:30
Сообщение
#11
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
На соседнем форуме обсуждали. Одна из тем: http://www.prog.org.ru/index.php?topic=144...g95463#msg95463 Спасибо еще раз. Есть еще один небольшой вопрос - дополнение к тому, что я увидел на prog.org по указанной ссылке. Надо ли взводить семафор (semaphore.acquire()), если я хочу проверить очередь на пустоту (вед в основе список QList) или узнать размер очереди? |
|
|
BRE |
9.11.2011, 17:45
Сообщение
#12
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Не нужны там семафоры (для другого они заточены), ну да ладно.
И в первом и во втором случае нужно блокировать доступ к QList. Сообщение отредактировал BRE - 9.11.2011, 17:46 |
|
|
AD |
9.11.2011, 18:19
Сообщение
#13
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
|
|
|
BRE |
9.11.2011, 19:05
Сообщение
#14
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Чаще всего встречал перевод "условные переменные".
|
|
|
AD |
10.11.2011, 10:19
Сообщение
#15
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Ага. Ну тут еще вопросы.
Смысл программы следующий: в главном потоке мы заполняем очередь запросов, в дополнительном - происходят вычисления и результаты попадают в очередь результатов. Исходя из приведенного на прог.орг примера сделал функции проверки на пустоту и размер следующими:
Но это как-то не так. При проверке на пустоту цикл while не заканчивается. Как это поправить корректно? На сколько я понял из обсуждения на то форуме, цикл нужен, но тогда какой? |
|
|
BRE |
10.11.2011, 10:26
Сообщение
#16
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Не нужно ждать условную переменную. Она нужна в рабочих потоках, что бы усыпить поток на время когда нет работы.
|
|
|
AD |
10.11.2011, 14:22
Сообщение
#17
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Из главного потока запустил дополнительный. В дополнительном у меня вечный цикл (forever) - памяти жрет 50%. Есть возможность, не отменяя цикла forever сделать так, чтобы память не жралась безмерно?
С потоками уже не раз работал, но еще ни разу не использовал forever в доп. потоке, потому такие вопросы и встают. Пока что делаю так (память жрет):
|
|
|
BRE |
10.11.2011, 15:27
Сообщение
#18
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
"Память жрет" это ты про "процессор жрет"?
Что такое функция wait, как она определена? А лучше ты все покажи. |
|
|
AD |
10.11.2011, 15:30
Сообщение
#19
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
|
|
|
Iron Bug |
10.11.2011, 15:38
Сообщение
#20
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
дык, в безусловном цикле крутится - потому и жрёт. любой поллинг жрёт проц.
тебе же про условные переменные говорили - вот и примени их, чтобы было условие, что в очереди что-то появилось, а в рабочем потоке - ожидание этого условия. |
|
|
Текстовая версия | Сейчас: 29.11.2024, 7:02 |