Переменная, доступная между загрузкой и операциями хранилища
Этот дефект происходит, когда вы используете эти функции, чтобы загрузить, и затем храните атомарную переменную.
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)