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