3 / 3 / 0
Регистрация: 07.10.2018
Сообщений: 59
|
|
1 | |
Атомарная запись по указателю18.04.2022, 23:00. Показов 769. Ответов 7
Метки нет Все метки)
(
Здравствуйте, есть указатель на заранее выделенный массив float, нужно в нескольких потоков к этому массиву атомарно добавлять значение.
std::mutex в данном случае не очень подходит, он слишком дорогой по времени. Есть ли c/c++ возможность писать атомарно по адресу, наподобие как это делает std::atomic?
0
|
18.04.2022, 23:00 | |
18.04.2022, 23:00 | |
Ответы с готовыми решениями:
7
Запись по указателю Атомарная операция Запись по ссылке или указателю в аргументы функции через макрос va_arg |
13 / 8 / 5
Регистрация: 14.04.2022
Сообщений: 63
|
|
19.04.2022, 07:37 | 2 |
Что конкретно надо сделать атомарно? Надо конкретику и код.
Если записать в одно место, то std::atomic, если в два и более мест, то std::mutex.
0
|
фрилансер
![]() 6322 / 5436 / 1108
Регистрация: 11.10.2019
Сообщений: 14,481
|
|
19.04.2022, 10:14 | 3 |
нужно минимизировать время нахождения под блокировкой
а также использовать std::shared_mutex + shared_lock, unique_lock
0
|
13 / 8 / 5
Регистрация: 14.04.2022
Сообщений: 63
|
|
19.04.2022, 10:41 | 4 |
std::shared_mutex еще больше тормоз чем std::mutex, там внутри счетчик читателей гоняется между потоками (ядрами) и на краткосрочных блокировках это даже хуже чем просто подождать пока другой блокировку отдаст, потом самому захватить.
0
|
фрилансер
![]() 6322 / 5436 / 1108
Регистрация: 11.10.2019
Сообщений: 14,481
|
|
19.04.2022, 10:50 | 5 |
Dmitriy-T, чем сказки рассказывать, лучше результаты корректных измерений в студию!
![]()
0
|
13 / 8 / 5
Регистрация: 14.04.2022
Сообщений: 63
|
|||||||||||
19.04.2022, 12:50 | 6 | ||||||||||
Надо задачу конкретную. Можно сферическую придумать, тогда скажешь что подогнал решение под результат ))
Суть проблемы в следующем, допустим в основном происходит чтение, два потока читают:
Эти перекидывания между кэшами это не быстро, а их много из-за счетчика, в этом примере 3-4 получается. В случае с std::mutex счетчиков нет, гонять кэши меньше надо. Поэтому применение std::shared_mutex имеет смысл если "чтение" занимает относительно долгое время, тогда параллельный доступ читателей компенсирует потери на описанных перебросках.
0
|
3 / 3 / 0
Регистрация: 07.10.2018
Сообщений: 59
|
||||||
19.04.2022, 16:54 [ТС] | 7 | |||||
Задача элементарная, нужно перемножить вектор и столбец, получив матрицу. У меня массив векторов и столбцов в результате получаю массив матриц, которые мне нужно поэлементно сложить.
Вот пример функции
0
|
13 / 8 / 5
Регистрация: 14.04.2022
Сообщений: 63
|
|
19.04.2022, 17:32 | 8 |
нет, тебя интересует атомарное прибавление к данным по указателю
![]() есть std::atomic_fetch_add(), но он вроде только с atomic типами работает. Другой вариант std::atomic_compare_exchange_*(). Тут любые типы простые. Принцип такой: в цикле сначала читаем, прибавляем, и говорим сохранить результат если текущее значение такое же как изначально прочитали. Если записалось возвращает true, значит из цикла можно выходить. Попробуй, не получится - отпишись, завтра помогу.
0
|
19.04.2022, 17:32 | |
19.04.2022, 17:32 | |
Помогаю со студенческими работами здесь
8
Атомарная операция Запись значения по указателю, переданному в качестве аргумента в функцию
Четыре кнопки на форме: добавить запись, удалить запись, закрыть, найти запись Switch по указателю Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
![]() |
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Система безопасности в Laravel: возможности и примеры
Wired 18.02.2025
Каждый день появляются новые виды атак и уязвимостей, которые могут поставить под угрозу конфиденциальные данные пользователей и функционирование всей системы. В этом контексте выбор надежного. . .
|
Давайте сравним Django и Laravel
Wired 18.02.2025
Django и Laravel - два мощных инструмента, которые часто сравнивают между собой. Оба фреймворка предлагают разработчикам богатый набор возможностей для создания масштабируемых веб-приложений, но. . .
|
Laravel или React - что лучше?
Wired 18.02.2025
В разработке веб выбор правильного инструмента часто определяет успех всего проекта. Особенно интересным представляется сравнение Laravel и React - двух популярных технологий, которые часто. . .
|
Laravel 11: новые возможности, гайд по обновлению
Wired 18.02.2025
Laravel 11 - это новая масштабная версия одного из самых популярных PHP-фреймворков, выпущенная в марте 2024 года. Эта версия продолжает традицию внедрения передовых технологий и методологий. . .
|
Миграции в Laravel
Wired 18.02.2025
Разработка веб-приложений на Laravel неразрывно связана с управлением структурой базы данных. При работе над проектом часто возникает необходимость вносить изменения в схему базы данных - добавлять. . .
|
Аутентификация в Laravel
Wired 18.02.2025
В современном мире веб-разработки безопасность пользовательских данных становится критически важным аспектом любого приложения. Laravel, как один из самых популярных PHP-фреймворков, предоставляет. . .
|
Laravel или Symfony: что лучше для старта?
Wired 18.02.2025
В веб-разработке выбор правильного фреймворка может стать определяющим фактором успеха проекта. Особенно это актуально для PHP - одного из самых распространенных языков программирования, где Laravel. . .
|
Что нового в Laravel 12
Wired 18.02.2025
С момента своего появления в 2011 году Laravel постоянно развивается, внедряя инновационные решения и совершенствуя существующие возможности. В начале 2025 года ожидается выход Laravel 12 - новой. . .
|
Роутер в Laravel: как работать с маршрутами
Wired 18.02.2025
Маршрутизация - один из основополагающих элементов любого веб-приложения на Laravel, определяющий как приложение отвечает на HTTP-запросы к различным URL-адресам. По сути, роутинг - это механизм. . .
|
Интеграция шаблона Bootstrap в Laravel PHP
Wired 18.02.2025
Разработка веб-приложений в современном мире требует не только надежного бэкенда, но и привлекательного, отзывчивого интерфейса. Laravel, как один из самых популярных PHP-фреймворков, отлично. . .
|