|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
|||||||
Потоко-безопасная Очередь05.04.2021, 20:16. Показов 12790. Ответов 106
Метки нет (Все метки)
... вырисовалась тема отсюда
а раздельная - вы, наверно, имеете ввиду для LIFO... наверно лучше на list выполнять? sorry, что много вопросов - стою на распутье - даже в отдельную тему вынесла
0
|
|||||||
| 05.04.2021, 20:16 | |
|
Ответы с готовыми решениями:
106
Потоко-независимая очередь записывает 2е команды в одну ячейку. Почему ?
Является ли boost::asio::tcp::acceptor потоко-безопасным ? |
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||
| 07.04.2021, 20:41 | |||
|
Если формирование сообщения в одном потоке и его обработка в другом - трудоёмкие задачи в сравнении с передачей, то параллельная обработка выиграет в производительности, блокировки не сильно повлияют (если не удерживать на время выполнения задач). Ну а если 500 интов "запушить" и потом "запопать", то и потоки не нужны. Ваша изначальная задача в этом примере просто передать 500 товаров другому потоку? Очередь - это просто контейнер?
0
|
|||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
||
| 07.04.2021, 20:45 [ТС] | ||
|
это не тот done, который в окончании всего цикла producer'a, вы, наверно, хотели сказать ![]() ладно, завтра продолжу
0
|
||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 07.04.2021, 20:59 | ||
bDone = false; после забора товаров (ничего больше удалять/добавлять не надо)А вообще вам уже говорили, что этот флаг не нужен, есть empty().
0
|
||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
|||||||
| 07.04.2021, 21:03 [ТС] | |||||||
|
да и кстати, вы правы, мой декремент не отрабатывает ВООБЩЕ
под каким углом (СВОИМ) не посмотрю
не получится же всё время на подсказках ![]() Добавлено через 50 секунд
0
|
|||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||||||||||||||
| 07.04.2021, 21:17 | ||||||||||||||
cv.wait(lock, [&]{return bElementDone=false;} это очень примерно следующее:
Подставляем в ваше выражение:
1
|
||||||||||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||||||
| 07.04.2021, 21:20 | ||||||
|
JeyCi,
1
|
||||||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
||||||
| 07.04.2021, 21:33 [ТС] | ||||||
|
zayats80888, убедили... ставлю
std::unique_lock<mutex> lock(m); в consumer'e...- продолжаю править дальше... спасибо за вскрытие грубой ошибки... oleg-m1973, и за ваш вариант спасибо
0
|
||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||
| 07.04.2021, 21:43 | |||
Сообщение было отмечено JeyCi как решение
Решениеcv.wait(lock, [&]{return bElementDone;}); либо while (!bElementDone ) cv.wait(lock);, а то масло маслянное получается.while (!done ) вклинится, например, после первых двух элементов, вы их вытащите, пойдёте спать, за это время producer накидает остальных, выставит флаг done, вы проснётесь и на следующей итерации цикла проверка done закончит работу, оставшееся вы так и не заберёте.
1
|
|||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
|||
| 07.04.2021, 21:55 [ТС] | |||
|
Добавлено через 50 секунд
0
|
|||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 07.04.2021, 21:58 | ||
|
1
|
||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|
| 07.04.2021, 21:59 | |
|
1
|
|
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
||||||
| 07.04.2021, 22:06 [ТС] | ||||||
мы добили его - моим ходом логической мысли... хоть как-то... ok! декремент выводит в 0
всем спасибо... только в правильности объявлений не совсем уверена
0
|
||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|
| 07.04.2021, 22:12 | |
|
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||||
| 07.04.2021, 22:13 | ||||
|
И, собственно, получится тот код, который я тебе показывал, только хуже.
1
|
||||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
||
| 07.04.2021, 22:16 [ТС] | ||
|
помимо того, что блокировку можно убрать в producer перед done=true (если его объявить atomic_bool)
0
|
||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 07.04.2021, 22:19 | ||
|
Это тот же косяк, о котором я говорил в 33 посте про свою портянку.
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 07.04.2021, 22:23 | ||
|
0
|
||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
|||||||||
| 08.04.2021, 08:11 [ТС] | |||||||||
![]() ХОТЯ ![]() просто думала, что если notify'ить после загрузки каждого элемента bElementDone - то consumer УЖЕ будет обрабатывать имеющиеся в очереди элементы, хоть она ещё и не full... т.е. всё-таки параллельно... по FIFO Кликните здесь для просмотра всего текста
НО т.к. p.s. но выходить из producer'a в consumer будет только после загрузки всей очереди - т.е. опять же producer блокирован на всё время своей работы - только блокировка рывками лочится/разлочивается... (на каждом loop)... единственное преимущество такого подхода, вероятно, в том, что на время загрузки очереди ничего не будет виснуть?.. - в смысле Event-loop самого приложения... p.p.s - остальные нюансы - касаются вопросов скорости - чтобы определиться с предпочтениями по тому или иному коду этой ветки
0
|
|||||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
| 08.04.2021, 10:00 | |
|
0
|
|
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
||
| 08.04.2021, 10:48 [ТС] | ||
|
конечно, ужасно... ведь все советы применила с этой ветки...
а по делу начинают появляться только ваши эмоции... ![]() мне совет от DrOffset кажется самым валидным ВЫВОД: не старайтесь казаться умнее самой логики - опУститесь до негативных эмоций, которые даже объяснениям не поддаются... потеряете дар речи
0
|
||
| 08.04.2021, 10:48 | |
|
Помогаю со студенческими работами здесь
60
Не безопасная форма Безопасная работа Безопасная регистрация
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|