Переменная, доступная между операциями загрузки и хранения
Этот дефект возникает при использовании этих функций для загрузки, а затем сохранения атомной переменной.
Функции C:
atomic_load()
atomic_load_explicit()
atomic_store()
atomic_store_explicit()
Функции C++:
std::atomic_load()
std::atomic_load_explicit()
std::atomic_store()
std::atomic_store_explicit()
std::atomic::load()
std::atomic::store()
Поток не может прервать атомарную нагрузку или операцию сохранения атома для переменной, но поток может прервать сохранение и затем загрузить последовательность.
Поток может изменять переменную между операциями загрузки и хранения, что приводит к условию гонки данных.
Чтобы считывать, изменять и сохранять переменную атомарно, используйте оператор составного назначения, например +=, atomic_compare_exchange() или atomic_fetch_*- функции семьи.
| Группа: Параллелизм |
| Язык: C | C++ |
| По умолчанию: Вкл для рукописного кода, выкл для сгенерированного кода |
Синтаксис командной строки:
ATOMIC_VAR_SEQUENCE_NOT_ATOMIC |
| Воздействие: среднее |
Atomic variable accessed twice in an expression | Data race | Data race including atomic operations | Find defects (-checkers)