Переменная, доступная между операциями загрузки и хранения
Этот дефект возникает, когда вы используете эти функции для загрузки, а затем храните атомарную переменную.
Функции 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++ |
По умолчанию: On для рукописного кода, off для сгенерированного кода |
Синтаксис командной строки
: ATOMIC_VAR_SEQUENCE_NOT_ATOMIC |
Влияние: Средний |
Atomic variable accessed twice in an expression
| Data race
| Data race including atomic operations
| Find defects (-checkers)