|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||||||
Потоко-безопасная Очередь05.04.2021, 20:16. Показов 13557. Ответов 106
Метки нет (Все метки)
... вырисовалась тема отсюда
а раздельная - вы, наверно, имеете ввиду для LIFO... наверно лучше на list выполнять? sorry, что много вопросов - стою на распутье - даже в отдельную тему вынесла
0
|
|||||||
| 05.04.2021, 20:16 | |
|
Ответы с готовыми решениями:
106
Потоко-независимая очередь записывает 2е команды в одну ячейку. Почему ?
Является ли boost::asio::tcp::acceptor потоко-безопасным ? |
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||
| 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
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||
| 13.04.2021, 10:36 [ТС] | ||
|
я же не космодром проектирую и не прыгну выше чужого сервера и скорости провайдера, а свой VPN мне дома уж точно не нужен... всё для Home-PK и автоматизации каждодневной рутины... а реальность практически для каждого бытового user'a такова:
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||||||
| 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
|
|||||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||
| 15.04.2021, 08:07 [ТС] | ||
|
может и не простое чтиво , но очень раскладывающее всё по полочкам:
UNIX взаимодействие процессов
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||||||||
| 15.04.2021, 21:56 [ТС] | |||||||||
как вариант - boost не нужен
но в U++ есть класс Event Добавлено через 1 час 27 минут Почему цикл ест так много CPU? Добавлено через 17 минут бывает и такое в STD:
0
|
|||||||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||
| 15.04.2021, 22:07 | |||
|
Кроме того:
0
|
|||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|
| 16.04.2021, 06:34 [ТС] | |
|
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||||||||||||||||||||
| 16.04.2021, 20:46 [ТС] | |||||||||||||||||||||
|
Э.Вильямс - Thread-safe Queue
=== просто есть в ref. какой-то try_lock
использовать по сути предлагают так
Добавлено через 18 минут или
Добавлено через 9 минут ок, он мне пока не нужен, т.к. используется для создания timed_lock() - тогда понятно...
0
|
|||||||||||||||||||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||
| 18.04.2021, 21:38 [ТС] | |||
|
Producer/Consumer На атомарных типах еще так
Добавлено через 33 минуты
0
|
|||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|
| 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
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||||||
| 19.04.2021, 22:08 [ТС] | |||||||
|
Главное! вспомнила своЙ ход логической мысли -- всегда сначала проверяю на выход из while (просто всегда return'ила, а тут break нужен) -- и потом всё по коду потока... но можно и в конце проверять... вобщем, чтобы не оборачивать в if-else и не вспоминать потом, что else... и отпринтовала для наглядности - очередь без ограничений на количество - зато стройная логика - своя родная - для завершения темы :
P.S. Need of Event Handling - КАРТИНКА красивая... нарисовать всегда полезнее, чем сразу кодить ... а Signal for Condition или Event - это уже, действительно, нюансы (хоть 1-е и может быть быстрее, чем 2-е)
0
|
|||||||
|
6353 / 3524 / 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
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||
| 19.04.2021, 22:45 [ТС] | ||
|
а по ТЗ - вариант с 2мя cv мне тоже кажется ещё более логичным (что и отметила ответом к теме) p.s. кто чего говорил - искать не буду --- наверно, плохо говорил, раз 5 страниц наговорили
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||||||
| 20.04.2021, 08:01 [ТС] | |||||||
значит while (!done) уже не помешает!? - значит моя провекрка была не лишняя! -- что ж такие нападки были от моей формулировки "от spurious wakeups" ? - риторический вопрос - если нет ответа...я просто по незнанию - не то проверяла ... и никто не знал (не думал) тоже пока отмазывали друг друга...ну и ладно... оставайтесь друг с другом, если в кодинг не хотите идти с красотой решения и стройной логикой... p.s. но эту статью я всё-таки как-нибудь ещё перечитаю не по диагонали - Don’t wait without a condition
0
|
|||||||
|
6353 / 3524 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 20.04.2021, 08:49 | ||
cv.wait(lock, [&]{return !goods.empty();}) - это цикл, из которого можно выйти только, если предикат вернёт true.Проверяется он при каждом пробуждении и не важно, ложное оно или нет. В той ситуации, которую я описал в предыдущем посте из этого ожидания не выйти(я упомянул про ложное пробуждение только потому, что в вашем последнем коде это единственное, что может пробудить поток в этом случае и оно не является проблемой).
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||
| 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
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||||
| 22.04.2021, 14:04 [ТС] | ||||
|
TheCalligrapher в теме Многопоточность. Не работает condition_variable очень тонко подметил...
(и проблема выше всё-таки проблема асинхронного исполнения на ограниченном количестве ядер... или на Linux, который в принципе, сколько угодно потоков может открыть, и иногда даже сам обеспечит атомарность счётчиков (например, семафоров), win-софт в большинстве своём однопоточен - особенности ОС могут быть критичны при выборе подхода и библиотеки для реализации MT, о чём имеются скупые ремарки в сети) Добавлено через 5 минут U++ CV - на заре молодости был таким
Добавлено через 10 минут а вообще, в непростом чтиве (уже обсуждалось) - в главе 8.5 расписан пример использования sleep чтобы дать время др. потоку для перезахвата мьютекса... (если бы пустословы и приверженцы буллинга, защитники первых, не перекашивали ветку - легче было бы проследить ключевые моменты и линки) Добавлено через 2 минуты TheCalligrapher'у отдельный respect за мат.часть
0
|
||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|
| 22.04.2021, 20:34 [ТС] | |
|
0
|
|
| 22.04.2021, 20:34 | |
|
Не безопасная форма Безопасная работа Безопасная регистрация
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|