|
0 / 0 / 0
Регистрация: 04.06.2022
Сообщений: 24
|
||||||
Вопрос по многопоточности18.07.2025, 22:33. Показов 17262. Ответов 104
Метки concurrency (Все метки)
Здравствуйте, сейчас смотрю книги по многопоточности, возникло несколько вопросов. Почему-то слово "вопрос" нельзя полностью написать в заголовке.
1. Известно, что переменную bool (или int, неважно) может 1 раз записать только 1 поток, остальные только читают, зачем тогда делать её atomic? 2. Улетят ли вызовы notify_one/notify_all вникуда, если они много раз вызваны перед методами, которые ожидают cv? 3. Допустим, есть 5 потоков и есть общий вектор с огромным количеством элементов. Первый поток изменяет только элементы с идексами 0, 5, 10; второй поток - элементы с индексами 1, 6, 11; третий поток - элементы с индексами 2, 7, 12 и т.д. Правильно ли я понимаю, что переброска кэша и связанное с ним замедление программы все равно может происходить, потому что индексы, с которыми работает каждый поток, находятся по соседству? 4. Вот пример потокобезопасной очереди из книги Вилльямса. Зачем при сравнении head с tail в функции get_tail мы используем мьютекс, который тут же перестает блокироваться после того, как мы вышли из функции?
0
|
||||||
| 18.07.2025, 22:33 | |
|
Ответы с готовыми решениями:
104
Управление потоками в многопоточности Нужна информация о многопоточности |
|
270 / 202 / 30
Регистрация: 26.11.2022
Сообщений: 879
|
|||
| 03.08.2025, 21:02 | |||
|
cdcodecpp, за всё обсуждение так и не понятно что у вас за задача.
0
|
|||
|
0 / 0 / 0
Регистрация: 04.06.2022
Сообщений: 24
|
||
| 03.08.2025, 21:22 [ТС] | ||
|
Некоторые вопросы остались нераскрытыми, если вы не знаете ответы или не хотите отвечать, то хотя бы не печатайте бесполезные сообщения и не оскорбляйте других участников, даже если считаете их сообщения неверными.
0
|
||
|
270 / 202 / 30
Регистрация: 26.11.2022
Сообщений: 879
|
||
| 03.08.2025, 21:36 | ||
|
Second Edition Copyright 2005 Allen B. Downey там как раз разжевывается теория многопоточности и все типовые и не типовые задачи с примерами и объяснениями.
0
|
||
| 03.08.2025, 22:44 | ||||||||
В свое время я довольно много (и увлеченно) этим занимался. Но вынужден признать что использование готовых тулзов практичнее и эффективнее. Ну это вечная проблема велик/готовое
В книге Вильямса подробно разбирается поведение для семантики relaxed, да, может прочитаться старое значение, причем даже перезаписанное несколько раз. Гарантируется только "atomicity" (мусора не будет). Полагаю (где это написано - не видел), что поведение для не-атомика точно такое же, т.е. отсутствие всякой синхронизации. Слушаю Вас, что там Вам "уж очень интересно"? ![]() Добавлено через 23 минуты
0
|
||||||||
|
270 / 202 / 30
Регистрация: 26.11.2022
Сообщений: 879
|
|||
| 03.08.2025, 23:22 | |||
|
Ulrich Drepper Red Hat, Inc." и про механизмы синхронизации кеша там расписано. но только для х86. а про другие архитектуры инфу приходится собирать из разрозненных источников. вот мне и интересно.
0
|
|||
| 04.08.2025, 01:07 | ||||
Добавлено через 36 минут cdcodecpp, а не написать ли Вам тестовый пример который показывает/доказывает что при отсутствии синхронизации могут быть прочитаны неверные данные? Возможно такое "практическое" изучение будет эффективнее
0
|
||||
|
270 / 202 / 30
Регистрация: 26.11.2022
Сообщений: 879
|
|
| 04.08.2025, 11:42 | |
|
cdcodecpp, проблема с санитайзерами при многопотоке в том что они не понимают что за задачу вы решаете. Ну может только в самых простых случаях.
Поэтому чтобы не делать одних и тех же ошибок и не полагаться на санитайзер каждый раз надо написать код который решает вашу задачу и потом только повторно его использовать и не менять. Например: есть mpmc очередь. Это базовый кирпичи для любой многопоточной программы, да и вообще это очень удобный примитив. Еë один раз написал, протестил (что тоже не тривиально) и больше не прикасается к ней. Следующий базовый кирпичик это пул потоков. Вот когда вы эти базовые части попереписываете несколько раз когда будете добавлять в них нужный вам функционал , выделите их в отдельную независимую от проекта библиотеку то тогда и появится некоторое понимание.
0
|
|
| 04.08.2025, 11:58 | |||||||
0
|
|||||||
|
0 / 0 / 0
Регистрация: 04.06.2022
Сообщений: 24
|
|||||
| 04.08.2025, 12:18 [ТС] | |||||
|
Добавлено через 2 минуты Добавлено через 1 минуту
0
|
|||||
|
фрилансер
6484 / 5711 / 1132
Регистрация: 11.10.2019
Сообщений: 15,226
|
||
| 04.08.2025, 12:42 | ||
|
Но рано или поздно всё равно выстрелит
0
|
||
|
0 / 0 / 0
Регистрация: 04.06.2022
Сообщений: 24
|
|||
| 04.08.2025, 21:58 [ТС] | |||
|
Добавлено через 2 минуты
0
|
|||
| 05.08.2025, 00:37 | |||||
Но если так, то чем самопал лучше? И если отвечать честно, то
А если не так, то зачем рекомендовать такой (тернистый) путь? Хотя, как говорили классики
0
|
|||||
|
112 / 110 / 30
Регистрация: 08.05.2021
Сообщений: 485
|
||
| 05.08.2025, 08:30 | ||
|
0
|
||
|
270 / 202 / 30
Регистрация: 26.11.2022
Сообщений: 879
|
|
| 05.08.2025, 12:32 | |
|
0
|
|
| 05.08.2025, 17:52 | ||
Ладно, много чего использую, часто выбор не мой а используемой либы. Конкретный пример: QThreadPool. Осваивается за полчаса без всякой подготовки. Простое и удобное использование, "кидаем в мешок" задачи, пул ими займется. Потом waitForDone, все посчитано. Знать о каких-то очередях, мутексах и.т.п. совершенно необязательно. Это "технология", зарядил - получил (результат);Ну и зачем пытаться с этим соревноваться? Так, показать свой (высокий) класс?
0
|
||
|
270 / 202 / 30
Регистрация: 26.11.2022
Сообщений: 879
|
||
| 05.08.2025, 20:46 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 04.06.2022
Сообщений: 24
|
|
| 05.08.2025, 21:16 [ТС] | |
|
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 05.08.2025, 21:23 | |
|
0
|
|
| 05.08.2025, 22:51 | ||||
Но Вы слишком много хотите. Напр пункт 11 - хороший вопрос. И по смыслу хочется ответить "да, так, верно". Но... где это написано? Найти этому подтверждение в стандарте (или в авторитетной книге) очень непросто (если оно там вообще есть). А ответ типа "ну это я так думаю" не удовлетворит пытливых изучающих Да, и играть в "почемучку" легко и приятно, я тоже могу задать массу вопросов, напр- верно ли что с семантикой relaxed поведение то же что и для не-атомиков, во всяком случае для "atomistic" типов, напр int? - есть ли возможность/семантика синхронизировать только одну/данную переменную с целью макс производительности? То что в каких-то случаях атомики тормозят (пусть не смертельно) замечено давно И.т.п. И наконец то о чем Вам сказали все. У Вас есть опыт простого (житейского, бытового) "разпоточивания"? Чем упорнее Вы отмалчиваетесь - тем крепче подозрение что никакого. А если так, то Ваш план изучения многопоточности, мягко говоря, неудачен. Это типа хотите брать производные/интегралы не освоив таблицу умножения. Поэтому да, нежужели
0
|
||||
|
0 / 0 / 0
Регистрация: 04.06.2022
Сообщений: 24
|
|||
| 05.08.2025, 23:22 [ТС] | |||
|
А как ещё изучать многопоточность, если не с прорабатывания книги Вильямса? Наверное, есть какие-то книги с задачками или сайты, если знаете, посоветуйте, пожалуйста. Добавлено через 4 минуты
0
|
|||
| 05.08.2025, 23:22 | |
|
Помогаю со студенческими работами здесь
60
изучение многопоточности Объясните принцип создания многопоточности Менеджмент жесткого диска при многопоточности Реализация многопоточности в консоли Сравнение многопоточности С++11 и WinAPI Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика
Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
|
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации:
В классе Работник добавить:
накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни
коэффициентПрезентеизма — снижает продуктивность. . .
|
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день.
Для работы необходим браузер,. . .
|
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности
Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано.
. . .
|
|
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
|
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива
Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
|
Диалоги с ИИ
zorxor 23.05.2026
Насколько я понимаю - Вы - Искусственный Интеллект. Это так?
Да, всё верно. Я — искусственный интеллект.
Я представляю собой большую языковую модель, созданную для помощи в самых разных задачах. . . .
|
Модель здравосохранения 14. Собираем всю модель вместе.
anaschu 22.05.2026
Модель собрана. В будущих постах на видео я покажу, как она работает.
В этом посте запускаем её, проверяем результаты и разбираем что можно с ней делать дальше.
Перед запуском проверяем. . .
|