3 / 3 / 0
Регистрация: 07.10.2018
Сообщений: 59
|
|
Атомарная запись по указателю18.04.2022, 23:00. Показов 834. Ответов 7
Метки нет Все метки)
(
Здравствуйте, есть указатель на заранее выделенный массив float, нужно в нескольких потоков к этому массиву атомарно добавлять значение.
std::mutex в данном случае не очень подходит, он слишком дорогой по времени. Есть ли c/c++ возможность писать атомарно по адресу, наподобие как это делает std::atomic?
0
|
18.04.2022, 23:00 | |
Ответы с готовыми решениями:
7
Запись по указателю Атомарная операция Запись по ссылке или указателю в аргументы функции через макрос va_arg |
фрилансер
![]() 6360 / 5509 / 1110
Регистрация: 11.10.2019
Сообщений: 14,635
|
||
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
|
фрилансер
![]() 6360 / 5509 / 1110
Регистрация: 11.10.2019
Сообщений: 14,635
|
|
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 по указателю Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Чем асинхронная логика (схемотехника) лучше тактируемой, как я думаю, что помимо энергоэффективности - ещё и безопасность.
Hrethgir 14.05.2025
Помимо огромного плюса в энергоэффективности, асинхронная логика - тотальный контроль над каждым совершённым тактом, а значит - безусловная безопасность, где безконтрольно не совершится ни одного. . .
|
Многопоточные приложения на C++
bytestream 14.05.2025
C++ всегда был языком, тесно работающим с железом, и потому особеннно эффективным для многопоточного программирования. Стандарт C++11 произвёл революцию, добавив в язык нативную поддержку потоков,. . .
|
Stack, Queue и Hashtable в C#
UnmanagedCoder 14.05.2025
Каждый опытный разработчик наверняка сталкивался с ситуацией, когда невинный на первый взгляд List<T> превращался в узкое горлышко всего приложения. Причина проста: универсальность – это прекрасно,. . .
|
Как использовать OAuth2 со Spring Security в Java
Javaican 14.05.2025
Протокол OAuth2 часто путают с механизмами аутентификации, хотя по сути это протокол авторизации. Представьте, что вместо передачи ключей от всего дома вашему другу, который пришёл полить цветы, вы. . .
|
Анализ текста на Python с NLTK и Spacy
AI_Generated 14.05.2025
NLTK, старожил в мире обработки естественного языка на Python, содержит богатейшую коллекцию алгоритмов и готовых моделей. Эта библиотека отлично подходит для образовательных целей и. . .
|
Реализация DI в PHP
Jason-Webb 13.05.2025
Когда я начинал писать свой первый крупный PHP-проект, моя архитектура напоминала запутаный клубок спагетти. Классы создавали другие классы внутри себя, зависимости жостко прописывались в коде, а о. . .
|
Обработка изображений в реальном времени на C# с OpenCV
stackOverflow 13.05.2025
Объединение библиотеки компьютерного зрения OpenCV с современным языком программирования C# создаёт симбиоз, который открывает доступ к впечатляющему набору возможностей. Ключевое преимущество этого. . .
|
POCO, ACE, Loki и другие продвинутые C++ библиотеки
NullReferenced 13.05.2025
В C++ разработки существует такое обилие библиотек, что порой кажется, будто ты заблудился в дремучем лесу. И среди этого многообразия POCO (Portable Components) – как маяк для тех, кто ищет. . .
|
Паттерны проектирования GoF на C#
UnmanagedCoder 13.05.2025
Вы наверняка сталкивались с ситуациями, когда код разрастается до неприличных размеров, а его поддержка становится настоящим испытанием. Именно в такие моменты на помощь приходят паттерны Gang of. . .
|
Создаем CLI приложение на Python с Prompt Toolkit
py-thonny 13.05.2025
Современные командные интерфейсы давно перестали быть черно-белыми текстовыми программами, которые многие помнят по старым операционным системам. CLI сегодня – это мощные, интуитивные и даже. . .
|