|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
|||||||
Потоко-безопасная Очередь05.04.2021, 20:16. Показов 12779. Ответов 106
Метки нет (Все метки)
... вырисовалась тема отсюда
а раздельная - вы, наверно, имеете ввиду для LIFO... наверно лучше на list выполнять? sorry, что много вопросов - стою на распутье - даже в отдельную тему вынесла
0
|
|||||||
| 05.04.2021, 20:16 | |
|
Ответы с готовыми решениями:
106
Потоко-независимая очередь записывает 2е команды в одну ячейку. Почему ?
Является ли boost::asio::tcp::acceptor потоко-безопасным ? |
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 07.04.2021, 17:15 | ||
|
oleg-m1973, да, согласен, тут я не прав. Хотя это и не повредит.
0
|
||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 07.04.2021, 17:15 | ||
|
0
|
||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
||||||||||||||
| 07.04.2021, 18:13 [ТС] | ||||||||||||||
|
всё время хочется ещё и atomic сделать для процессора... но во всех прмерах почему-то без atomic?
bDone)ой, точно - поставила в producer перед notify - bDone=true; - вроде стал стабилен... но можно и wait не-перегруженный лямбдой, как вы здесь делали Добавлено через 4 минуты
это др. done
0
|
||||||||||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||||||
| 07.04.2021, 18:16 | |||||||
0
|
|||||||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
|
| 07.04.2021, 18:30 [ТС] | |
|
zayats80888, ваш вариант выдаёт Net=0 ... (win32 gcc 9.3)
кстати мой с моими правками всё ещё не стабилен... смахивает на deadlock? симптомы, как и прежде
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|
| 07.04.2021, 18:33 | |
|
0
|
|
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
|
| 07.04.2021, 18:34 [ТС] | |
|
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 07.04.2021, 18:37 | ||
c - будет выдавать 500...Или перенесите инкремент в сonsumer...
0
|
||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
|||||||
| 07.04.2021, 18:41 [ТС] | |||||||
|
всё
Добавлено через 2 минуты я кстати согласна с вашими комментами по вашему коду...
0
|
|||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 07.04.2021, 18:47 | ||
|
У меня вопросы к вашему коду:
1) Зачем флаг bDone, если есть метод empty?2) Зачем декремент с в consumer, если вы ожидаете 500?3) Что это должно означать и почему присвоение в теле лямбды, да ещё и захваченному копированием объекту
0
|
||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
||
| 07.04.2021, 18:54 [ТС] | ||
|
не deadlock Добавлено через 3 минуты вобщем, всем спасибо!.. - тормозит i'net (сбивает с мысли, пока пост доходит до форума) - ещё раз проверю и оттестирую все мысли (и свои и чужие)... в любом случае всем спасибо - все мысли уловила (даже быстрее, чем моё соединение с i'net сейчас)Добавлено через 1 минуту только вопрос этого поста остался вопросом... - подумаю ещё Добавлено через 1 минуту кстати 1) написала, что согласна 2) написала, что согласна 3) от "ложных пробуждений" - согласна, по ссылке надо захватить
0
|
||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||||||
| 07.04.2021, 19:16 | ||||||
Сообщение было отмечено JeyCi как решение
Решение
Не до конца понятно, что тут в очередях предполагается сделать, но если нужно "получить однопоточное исполнение для двух потоков", можно и вот так (условие
(i % 10) == 0 эмулирует накопление очереди, цикл в потребителе - её обработку...):
1
|
||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||
| 07.04.2021, 19:24 | |||
|
Кстати, я там в коде не учел один момент, из-за "отпускания" блокировки в producer перед выставлением флага done, consumer может зависнуть в ожидании. Т.е. флаг завершения нужно ставить внутри цикла producer или проверять его в ожидании на condition_variable. Если же очередь сама является сообщением, да ещё и одноразовым(как в изначальном варианте), то и смысла в потоках особого нет.
1
|
|||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
||
| 07.04.2021, 19:33 [ТС] | ||
|
и кстати, глобальнаяую переменную вроде по ссылке нельзя захватить, значит объявление перенести в main...
но с учётом того, что даже с флагом вместо проверки goods.empty() логика соблюдается - хоть и через лишнюю переменную, - всё равно не понимаю, что в моём случае даёт нестабильность (даже с [&]) просто интересно понять Добавлено через 6 минут просто размять мозги, перейдя 1 раз между потоками, тоже не помешает
0
|
||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||||||||
| 07.04.2021, 19:33 | ||||||||
|
Кликните здесь для просмотра всего текста
0
|
||||||||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
|
| 07.04.2021, 19:34 [ТС] | |
|
del
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 07.04.2021, 19:37 | ||
|
1
|
||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
||||||||
| 07.04.2021, 20:10 [ТС] | ||||||||
|
ой, подправила ещё (впридачу к [&]) -- false
oleg-m1973, мне вот тоже показалось сейчас то же самое, только под др ракурсом ну, это если воспользоваться советом от zayats80888, - и блокировать в цикле...Добавлено через 5 минут может, TRam_ и прав, - чтобы лочить в цикле и перебрасывать фокус внимания потоков на разделяемую переменную - лучше 2 c.v. -- оно, может и легче так... инача лок/анлок на каждом шаге loop - тоже больно как-то для performance
0
|
||||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 07.04.2021, 20:11 | ||
|
Сбрасывайте этот флаг в конце цикла и всё.
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 07.04.2021, 20:11 | ||
|
0
|
||
| 07.04.2021, 20:11 | |
|
Помогаю со студенческими работами здесь
40
Не безопасная форма Безопасная работа Безопасная регистрация
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает
Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
|
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
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|