|
3 / 3 / 0
Регистрация: 07.10.2018
Сообщений: 59
|
|
Атомарная запись по указателю18.04.2022, 23:00. Показов 972. Ответов 7
Метки нет (Все метки)
Здравствуйте, есть указатель на заранее выделенный массив float, нужно в нескольких потоков к этому массиву атомарно добавлять значение.
std::mutex в данном случае не очень подходит, он слишком дорогой по времени. Есть ли c/c++ возможность писать атомарно по адресу, наподобие как это делает std::atomic?
0
|
|
| 18.04.2022, 23:00 | |
|
Ответы с готовыми решениями:
7
Запись по указателю Атомарная операция Запись по ссылке или указателю в аргументы функции через макрос va_arg |
|
13 / 8 / 5
Регистрация: 14.04.2022
Сообщений: 63
|
|
| 19.04.2022, 07:37 | |
|
Что конкретно надо сделать атомарно? Надо конкретику и код.
Если записать в одно место, то std::atomic, если в два и более мест, то std::mutex.
0
|
|
|
фрилансер
6447 / 5643 / 1128
Регистрация: 11.10.2019
Сообщений: 15,017
|
||
| 19.04.2022, 10:14 | ||
|
а также использовать std::shared_mutex + shared_lock, unique_lock
0
|
||
|
13 / 8 / 5
Регистрация: 14.04.2022
Сообщений: 63
|
|
| 19.04.2022, 10:41 | |
|
std::shared_mutex еще больше тормоз чем std::mutex, там внутри счетчик читателей гоняется между потоками (ядрами) и на краткосрочных блокировках это даже хуже чем просто подождать пока другой блокировку отдаст, потом самому захватить.
0
|
|
|
фрилансер
6447 / 5643 / 1128
Регистрация: 11.10.2019
Сообщений: 15,017
|
|
| 19.04.2022, 10:50 | |
|
Dmitriy-T, чем сказки рассказывать, лучше результаты корректных измерений в студию!
0
|
|
|
13 / 8 / 5
Регистрация: 14.04.2022
Сообщений: 63
|
|||||||||||
| 19.04.2022, 12:50 | |||||||||||
|
Надо задачу конкретную. Можно сферическую придумать, тогда скажешь что подогнал решение под результат ))
Суть проблемы в следующем, допустим в основном происходит чтение, два потока читают:
Эти перекидывания между кэшами это не быстро, а их много из-за счетчика, в этом примере 3-4 получается. В случае с std::mutex счетчиков нет, гонять кэши меньше надо. Поэтому применение std::shared_mutex имеет смысл если "чтение" занимает относительно долгое время, тогда параллельный доступ читателей компенсирует потери на описанных перебросках.
0
|
|||||||||||
|
3 / 3 / 0
Регистрация: 07.10.2018
Сообщений: 59
|
||||||
| 19.04.2022, 16:54 [ТС] | ||||||
|
Задача элементарная, нужно перемножить вектор и столбец, получив матрицу. У меня массив векторов и столбцов в результате получаю массив матриц, которые мне нужно поэлементно сложить.
Вот пример функции
0
|
||||||
|
13 / 8 / 5
Регистрация: 14.04.2022
Сообщений: 63
|
||
| 19.04.2022, 17:32 | ||
т.е. тебе надо атомарно прочитать значение, прибавить к нему и записать обратно.есть std::atomic_fetch_add(), но он вроде только с atomic типами работает. Другой вариант std::atomic_compare_exchange_*(). Тут любые типы простые. Принцип такой: в цикле сначала читаем, прибавляем, и говорим сохранить результат если текущее значение такое же как изначально прочитали. Если записалось возвращает true, значит из цикла можно выходить. Попробуй, не получится - отпишись, завтра помогу.
0
|
||
| 19.04.2022, 17:32 | |
|
Помогаю со студенческими работами здесь
8
Атомарная операция Запись значения по указателю, переданному в качестве аргумента в функцию
Четыре кнопки на форме: добавить запись, удалить запись, закрыть, найти запись Switch по указателю Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|