|
0 / 0 / 0
Регистрация: 04.06.2022
Сообщений: 24
|
||||||
Вопрос по многопоточности18.07.2025, 22:33. Показов 17074. Ответов 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
Управление потоками в многопоточности Нужна информация о многопоточности |
|
267 / 199 / 30
Регистрация: 26.11.2022
Сообщений: 874
|
|||
| 03.08.2025, 21:02 | |||
|
cdcodecpp, за всё обсуждение так и не понятно что у вас за задача.
0
|
|||
|
0 / 0 / 0
Регистрация: 04.06.2022
Сообщений: 24
|
||
| 03.08.2025, 21:22 [ТС] | ||
|
Некоторые вопросы остались нераскрытыми, если вы не знаете ответы или не хотите отвечать, то хотя бы не печатайте бесполезные сообщения и не оскорбляйте других участников, даже если считаете их сообщения неверными.
0
|
||
|
267 / 199 / 30
Регистрация: 26.11.2022
Сообщений: 874
|
||
| 03.08.2025, 21:36 | ||
|
Second Edition Copyright 2005 Allen B. Downey там как раз разжевывается теория многопоточности и все типовые и не типовые задачи с примерами и объяснениями.
0
|
||
| 03.08.2025, 22:44 | ||||||||
В свое время я довольно много (и увлеченно) этим занимался. Но вынужден признать что использование готовых тулзов практичнее и эффективнее. Ну это вечная проблема велик/готовое
В книге Вильямса подробно разбирается поведение для семантики relaxed, да, может прочитаться старое значение, причем даже перезаписанное несколько раз. Гарантируется только "atomicity" (мусора не будет). Полагаю (где это написано - не видел), что поведение для не-атомика точно такое же, т.е. отсутствие всякой синхронизации. Слушаю Вас, что там Вам "уж очень интересно"? ![]() Добавлено через 23 минуты
0
|
||||||||
|
267 / 199 / 30
Регистрация: 26.11.2022
Сообщений: 874
|
|||
| 03.08.2025, 23:22 | |||
|
Ulrich Drepper Red Hat, Inc." и про механизмы синхронизации кеша там расписано. но только для х86. а про другие архитектуры инфу приходится собирать из разрозненных источников. вот мне и интересно.
0
|
|||
| 04.08.2025, 01:07 | ||||
Добавлено через 36 минут cdcodecpp, а не написать ли Вам тестовый пример который показывает/доказывает что при отсутствии синхронизации могут быть прочитаны неверные данные? Возможно такое "практическое" изучение будет эффективнее
0
|
||||
|
267 / 199 / 30
Регистрация: 26.11.2022
Сообщений: 874
|
|
| 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
|
|||||
|
фрилансер
6481 / 5705 / 1132
Регистрация: 11.10.2019
Сообщений: 15,199
|
||
| 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
|
||
|
267 / 199 / 30
Регистрация: 26.11.2022
Сообщений: 874
|
|
| 05.08.2025, 12:32 | |
|
0
|
|
| 05.08.2025, 17:52 | ||
Ладно, много чего использую, часто выбор не мой а используемой либы. Конкретный пример: QThreadPool. Осваивается за полчаса без всякой подготовки. Простое и удобное использование, "кидаем в мешок" задачи, пул ими займется. Потом waitForDone, все посчитано. Знать о каких-то очередях, мутексах и.т.п. совершенно необязательно. Это "технология", зарядил - получил (результат);Ну и зачем пытаться с этим соревноваться? Так, показать свой (высокий) класс?
0
|
||
|
267 / 199 / 30
Регистрация: 26.11.2022
Сообщений: 874
|
||
| 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|