|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
|||||||
Потоко-безопасная Очередь05.04.2021, 20:16. Показов 12771. Ответов 106
Метки нет (Все метки)
... вырисовалась тема отсюда
а раздельная - вы, наверно, имеете ввиду для LIFO... наверно лучше на list выполнять? sorry, что много вопросов - стою на распутье - даже в отдельную тему вынесла
0
|
|||||||
| 05.04.2021, 20:16 | |
|
Ответы с готовыми решениями:
106
Потоко-независимая очередь записывает 2е команды в одну ячейку. Почему ?
Является ли boost::asio::tcp::acceptor потоко-безопасным ? |
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
||
| 13.04.2021, 08:06 [ТС] | ||
|
oleg-m1973, ваши комменты (опускающие всех и вся) уже в который раз неадекватны в ситуациях, которые я в своём кодинге проходила уже не раз, - когда тебе пихают и 4 ядра и RAM за террабайт и всё в кармане - под гнилым девизом "у всех так" и "сейчас..." не зная "зачем"... так и идите со всеми... коль сапожники, делающие качественную обувь, вами презираемы больше, чем сапоги-схороходы, под которые собираете свой арсенал (вы что ещё мультиков не насмотрелись)... я всегда прежде всего за адекватность и соответствие!.. решений - задачам... от всего не застрахуешься
... а всё и не надо!!Вы знаете как правильно тестируется многопоточность... предлагаю, не опускать ветку в очередной раз до ваших предрассудков (заведите для этого, пожалуйста, отдельную ветку - для оскорблений смартфонов, ос, железа и чего хотите) -- напрягают ваши гуриные реплики (то же самое без вонючих аллегорий и метаморфозов и недосказанностей будет восприниматься более информативно)... я гурей, знающих только два слова и тележку высокомерия в адрес сапожников, без попыток снизойти до улаживания своих психо-эмоц-ых проблем вместо поливания грязью всех, - не-по-ни-маю... адекватных доводов у вас НЕТ, предмет вашей viewpoint не раскрыли... (просто начали вываливать свой негатив) и не все задачи зависят от сети... (- я ведь тоже могу говорить недосказанности)... достал такой диалог с вам... достало ваше пренебрежение к теме и решениям с "предельной поезностью" под конкретные задачи... хоть С/С++ и оперирует абстракциями, я задачи всегда ставлю конкретно, чего и вам желаю (а не надеяться на то, что все побегут обслуживать 4 ядра да ещё из ооооочень длинной очереди, потому что так сказал гуру-Олег, не снизойдя до логичных пояснений адекватности)... ради геморроя, где он не нужен... кому нужен - тот и платит невразумительными переключениями контекстов
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
| 13.04.2021, 09:23 | |
|
0
|
|
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
||
| 13.04.2021, 10:36 [ТС] | ||
|
я же не космодром проектирую и не прыгну выше чужого сервера и скорости провайдера, а свой VPN мне дома уж точно не нужен... всё для Home-PK и автоматизации каждодневной рутины... а реальность практически для каждого бытового user'a такова:
0
|
||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
|||||||
| 14.04.2021, 19:40 [ТС] | |||||||
|
да, и кстати... видимо, на этом форуме не всегда делятся информацией, а периодически - дезинформацией...
- часто лочить/усыплять поток не надо!.. проектируйте тщательно, внимательно и осторожно!.. чтобы потом такие страховые агенты не выносили вам мозг... - своим враньём пытаясь формировать ваше представление о предмете... умышленно сливая на вас свой негатив и свою дезинформацию... не позволяйте замусоривать вам мозг ... грустно делать такие выводы о человеке, который что-то знает, но почему-то несёт и то, чего не знает, - с тем же видом... а ещё грустнее будет кодить с его пустым PR'ом...проектирование потоков вообще целесообразно при удалённой локализации клиента и сервера - для доступа к серверу нескольких клиентов и взаимодействию по сети... === "качество инфо - это качество итогового продукта!" === но не всё так страшно:
и лочить 2 мьютекса без deadlock'a можно было ещё до появления scoped_lock ссылка
https_stackoverflow_com/questions/17113619/whats-the-best-way-to-lock-multiple-stdmutexes/17113678
=== многопоточность бывает полезна, но, используя, сигнальные механизмы IPC- не стоит забывать, что это всего лишь сигнал - важно, чтобы его не перехватил НЕ-target, а target, чтобы принял при любом развитии событий... === при этом здесь
так же и здесь, как в мозге, - не храните мусор...=== и всё же бывает и lock-free приносит пользу
адекватный тест разницы между одним и двумя потоками === 4 совета банально просты:
ИТОГО: обмен мнениями хорошо - уход от реальности плохо... остановлюсь на примере ThreadSafeQueue из линка, уже бывшего
0
|
|||||||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
||
| 15.04.2021, 08:07 [ТС] | ||
|
может и не простое чтиво , но очень раскладывающее всё по полочкам:
UNIX взаимодействие процессов
0
|
||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
|||||||||
| 15.04.2021, 21:56 [ТС] | |||||||||
как вариант - boost не нужен
но в U++ есть класс Event Добавлено через 1 час 27 минут Почему цикл ест так много CPU? Добавлено через 17 минут бывает и такое в STD:
0
|
|||||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||
| 15.04.2021, 22:07 | |||
|
Кроме того:
0
|
|||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
|
| 16.04.2021, 06:34 [ТС] | |
|
0
|
|
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
|||||||||||||||||||||
| 16.04.2021, 20:46 [ТС] | |||||||||||||||||||||
|
Э.Вильямс - Thread-safe Queue
=== просто есть в ref. какой-то try_lock
использовать по сути предлагают так
Добавлено через 18 минут или
Добавлено через 9 минут ок, он мне пока не нужен, т.к. используется для создания timed_lock() - тогда понятно...
0
|
|||||||||||||||||||||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
|||
| 18.04.2021, 21:38 [ТС] | |||
|
Producer/Consumer На атомарных типах еще так
Добавлено через 33 минуты
0
|
|||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
|
| 19.04.2021, 09:59 [ТС] | |
|
ИТОГО:
1) BlockingQueue - просто потому что надо блокировать (синхронизировать) при помещении/изъятии элемента из очереди 2) Кольцевой буфер - на опр. количество мест - чтобы не было переполнения буфера - что в принципе и реализовал TRam_ в посте, отмеченном ответом к теме (на 10 мест) 3) MessageQueue делается так же, как просто thread-safe Queue - бывает синхронная и асинхронная (т.е. shared-memory становится просто элементом для асинхронной реализации message-passing через обычную queue)... Java-презентация - главная идея, как всегда, sender-receiver, а что с каких портов и на какие слоты - это уже нюансы имеющегося железа, языка и предпочтений разработчика (по п.4 кстати не уверена, что для смартфонов пишут на C++ в современном мире, раз уж гур выше ничего кроме 4х-ядерных смартфонов не знает)... 4) человек, завёрнутый на смартфонах, вносил путаницу в тему, умышленно пытаясь перекосить ход темы, -- отрываясь от логики в сторону железа... таким ходом и до осциллографов и различных медицинских приборов не далеко добраться - где вообще отсутствует RAM, и надо умудряться весь DataFlow просчитать и вывести на экран через к.-л. CPU... (а с качеством инфо от гура [oleg-m1973, ] - он даже побъёт рекорды covid'а...) (я тему открывала не под названием "как увеличить тормозной пусть, чтобы пройти его быстро", а именно по названию в заголовке темы; все умышленные извращения темы и развешивание на неё лапши - предлагаю читающим отправлять не на мусороперерабатывающий завод, а человеку, несущему мусор, лично в его мозг) здоровый диалог и ключевые моменты - всегда приветствуются в теме 5) MSVC Parallel Programming in Visual C++... (поскольку не люблю пока Qt с такой её support) 6) отдельно стоит проработать Cancellation всех потоков на всякий случай (в примерах TS-Queue обычно не указаны, как и exception_catching)... но в норм. Фреймворке это обычно заложено в родную реализацию потоков/многопоточности (как, например, в U++, с которым знакома)
0
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||
| 19.04.2021, 14:41 | ||
|
1
|
||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
|||||||
| 19.04.2021, 22:08 [ТС] | |||||||
|
Главное! вспомнила своЙ ход логической мысли -- всегда сначала проверяю на выход из while (просто всегда return'ила, а тут break нужен) -- и потом всё по коду потока... но можно и в конце проверять... вобщем, чтобы не оборачивать в if-else и не вспоминать потом, что else... и отпринтовала для наглядности - очередь без ограничений на количество - зато стройная логика - своя родная - для завершения темы :
P.S. Need of Event Handling - КАРТИНКА красивая... нарисовать всегда полезнее, чем сразу кодить ... а Signal for Condition или Event - это уже, действительно, нюансы (хоть 1-е и может быть быстрее, чем 2-е)
0
|
|||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 19.04.2021, 22:32 | ||
|
oleg-m1973 показал вам правильный пример в данном контексте. Не норм, т.к. возможен следующий сценарий: producer пушит последний элемент и перед строкой 30 система его переключает(усыпляет) -> consumer забирает последний элемент и переходит на следующей итерации в цикл ожидания(done всё еще false) -> producer просыпается, выставляет флаг done и завершает работу. Только consumer теперь разбудить некому, а даже если будет ложное пробуждение, то снова уснет, т.к. done не проверяется. Не по теме: P.S. зачем volatile???
1
|
||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
||
| 19.04.2021, 22:45 [ТС] | ||
|
а по ТЗ - вариант с 2мя cv мне тоже кажется ещё более логичным (что и отметила ответом к теме) p.s. кто чего говорил - искать не буду --- наверно, плохо говорил, раз 5 страниц наговорили
0
|
||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
|||||||
| 20.04.2021, 08:01 [ТС] | |||||||
значит while (!done) уже не помешает!? - значит моя провекрка была не лишняя! -- что ж такие нападки были от моей формулировки "от spurious wakeups" ? - риторический вопрос - если нет ответа...я просто по незнанию - не то проверяла ... и никто не знал (не думал) тоже пока отмазывали друг друга...ну и ладно... оставайтесь друг с другом, если в кодинг не хотите идти с красотой решения и стройной логикой... p.s. но эту статью я всё-таки как-нибудь ещё перечитаю не по диагонали - Don’t wait without a condition
0
|
|||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 20.04.2021, 08:49 | ||
cv.wait(lock, [&]{return !goods.empty();}) - это цикл, из которого можно выйти только, если предикат вернёт true.Проверяется он при каждом пробуждении и не важно, ложное оно или нет. В той ситуации, которую я описал в предыдущем посте из этого ожидания не выйти(я упомянул про ложное пробуждение только потому, что в вашем последнем коде это единственное, что может пробудить поток в этом случае и оно не является проблемой).
0
|
||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
||
| 20.04.2021, 09:54 [ТС] | ||
не имея доказательст! вы сами уже запутались...p.s. zayats80888, done может стать только после того, как producer поместил очередной элемент (даже если последний) - не раньше... а consumer пока !done - в любом случае дождётся нужного true в предикате, если done ещё не выставлено... !! даже если планировщик переключит контекст до выставления done - consumer обработает свой последний элемент, когда истинность пробуждения будет подтверждена предикатом, выдавшем наконец true... планировщик, насколько помню, не такой дурной, как вам кажется... и переключает контекст в строго логичных местах, а не вдруг, - в частности на каждом цикле итерации... можно, вероятно, и yield попробовать сделать, но это излишне здесь... и когда цикл consumer'a пойдёт на следующий свой loop - он уже подхватит то, что в параллели сделал producer (модифицировал done в true) - а именно своей проверкой if... p.p.s. вобщем, zayats80888, спорьте, пожалуйста, дальше с планировщиком, ему объясняя, что он ничего не понимает, а не мне... а проверять лишний раз атомарный флаг (который в принципе к вашему предикату не имеет отношения) или не проверять - решайте сами... или делайте на 2х cv... или всё-таки библиотеку пролистайте - чтобы определиться: так выйдет он у вас без лишней проверки или не выйдет... и чего вы так боитесь этих spurious, если wait закончится по true... у вас явное недопонимание Планировщика... (и вы, как и предыдущий гуру вносите бред в тему) -- приложите результаты тщательных испытаний описываемой вами ситуации, чтобы хотя бы отразить её возможность практическую, а не то что вам кажется... а покА вы спорите сам с собой... обвиняя меня в своих непонятках... - очередной троль? -- вы выражения подбирайте, отражающие суть, а не ваши иллюзии, которые ещё и не по теме... культура речи - и в смыслах передаваемых! (если вы не в курсе)... - ложь - есть ложь!
0
|
||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
||||
| 22.04.2021, 14:04 [ТС] | ||||
|
TheCalligrapher в теме Многопоточность. Не работает condition_variable очень тонко подметил...
(и проблема выше всё-таки проблема асинхронного исполнения на ограниченном количестве ядер... или на Linux, который в принципе, сколько угодно потоков может открыть, и иногда даже сам обеспечит атомарность счётчиков (например, семафоров), win-софт в большинстве своём однопоточен - особенности ОС могут быть критичны при выборе подхода и библиотеки для реализации MT, о чём имеются скупые ремарки в сети) Добавлено через 5 минут U++ CV - на заре молодости был таким
Добавлено через 10 минут а вообще, в непростом чтиве (уже обсуждалось) - в главе 8.5 расписан пример использования sleep чтобы дать время др. потоку для перезахвата мьютекса... (если бы пустословы и приверженцы буллинга, защитники первых, не перекашивали ветку - легче было бы проследить ключевые моменты и линки) Добавлено через 2 минуты TheCalligrapher'у отдельный respect за мат.часть
0
|
||||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
|
| 22.04.2021, 20:34 [ТС] | |
|
0
|
|
| 22.04.2021, 20:34 | |
|
Помогаю со студенческими работами здесь
100
Не безопасная форма Безопасная работа Безопасная регистрация
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|