Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
-23 / 4 / 0
Регистрация: 15.08.2014
Сообщений: 492

Использование std::atomic вместо mutex

16.07.2022, 21:06. Показов 1611. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!

Правильно ли я понимаю, что если мне необходимо использовать общую переменную для использования несколькими потоками (один выставляет флаг-команду в этой переменной - что надо сделать другому потоку, а другой считывает и делает это), то достаточно объявить такую переменную через std::atomic (т.е. не использовать мьютекс или крит, секцию) ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.07.2022, 21:06
Ответы с готовыми решениями:

Std::atomic vs std::mutex
class AtomicSome { private: std::atomic_bool _isReady; //not std::atomic_flag public: ...

atomic vs mutex
Что лучше использовать на практике? Читаю я про atomic и где-то пишут что атомарные операции иногда могут снизить производительность, в то...

Инкремент переменной между потоками без atomic, с использованием mutex
Есть такой код: #include <iostream> #include <mutex> #include <thread> std::mutex mu;

4
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
16.07.2022, 21:31
Цитата Сообщение от LUN2 Посмотреть сообщение
один выставляет флаг-команду в этой переменной
Что за флаг-команда и для чего она нужна?
Если этот флаг определяет лишь выбор "пути" в коде, то достаточно атомика. Но если он определяет точку "следования", т.е. нужно дождаться какого-то значения этого флага и продолжить, то ожидание на атомике выгодно только в определенных алгоритмах, в большенстве же случаев это неоправданная трата ресурсов процессора.
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13200 / 6835 / 1822
Регистрация: 18.10.2014
Сообщений: 17,293
16.07.2022, 23:21
Цитата Сообщение от LUN2 Посмотреть сообщение
то достаточно объявить такую переменную через std::atomic (т.е. не использовать мьютекс или крит, секцию)
Да, достаточно. Является ли этот вариант оптимальным - зависит от ряда других факторов, которые вы тут не привели.
1
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
17.07.2022, 02:05
Цитата Сообщение от LUN2 Посмотреть сообщение
один выставляет флаг-команду в этой переменной
Если выставление других флаг-команд не повлияет на выполнение в другом потоке, то ни mutex, ни std::atomic не нужны.

Вообще идея std::atomic в предотвращении случая, когда "первый поток часть переменной изменил, часть не успел изменить, и тут начал выполняться второй поток". Если такое предотвращать не обязательно, то переменные можно менять без синхронизации доступа.

Ну и ещё, если два потока пользуются не только этой общей переменной, но и некоторыми другими общими данными, std::atomic может помочь с соблюдением порядка обращения к переменной и данным (т.к. из-за оптимизации или архитектуры процессора порядок обращения может оказаться не таким, как в коде)
1
-23 / 4 / 0
Регистрация: 15.08.2014
Сообщений: 492
17.07.2022, 14:59  [ТС]
Ok. Всем спасибо.
Вопрос об оптимальности в этом вопросе не рассматривался, т.к., действительно, на влияют и другие факторы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.07.2022, 14:59
Помогаю со студенческими работами здесь

Std::atomic выбор конструктора
недавно коллега вкомитил строчку вроде этой std::atomic<int> at = 3; вкоммитил с чистой душой, потому как его пятнадцатая студия...

Пример о необходимости std::atomic
Изучаю std::atomic. Пытаюсь сделать пример, при котором приложение упадет, без использование std::atomic int i; void foo(){ ...

Стоит ли использовать std::atomic?
Доброго времени суток. Есть переменная в "поток 2" (назовем так) const volatile bool *pbCancelled;, являющаяся указателем на флаг ...

Std::atomic и другие объекты
Добрый день! Подскажите пожалуйста можно ли создать std::atomic<std::vector<int> > myvector; Или же для таких объектов...

Std::mutex и std::recursive_mutex
Есть некий класс: class A { public bool some_method(); private: std::mutex mutex_;


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru