Контур проверяет состояние отказа после возможного ложного отказа
Этот дефект возникает, когда следующие функции атомарного сравнения и обмена, которые могут ошибочно завершиться сбоем, вызываются извне цикла.
Атомные функции C:
atomic_compare_exchange_weak()
atomic_compare_exchange_weak_explicit()
Атомные функции C++:
std::atomic<T>::compare_exchange_weak(T* expected, T desired)
std::atomic<T>::compare_exchange_weak_explicit(T* expected, T desired, std::memory_order succ, std::memory_order fail)
std::atomic_compare_exchange_weak(std::atomic<T>* obj, T* expected, T desired)
std::atomic_compare_exchange_weak_explicit(volatile std::atomic<T>* obj, T* expected, T desired, std::memory_order succ, std::memory_order fail)
Функции сравнивают содержимое памяти представлений объектов, на которые указывает obj и expected. Сравнение может ошибочно возвращать значение false, даже если содержимое памяти равно. Этот ложный сбой ускоряет выполнение функций на некоторых платформах.
Функция атомарного сравнения и обмена, которая ложно терпит неудачу, может привести к неожиданным результатам и неожиданному потоку управления.
Оберните функции атомарного сравнения и обмена, которые могут ошибочно завершиться сбоем в цикле. Контур проверяет состояние отказа после возможного ложного отказа.
| Группа: Параллелизм |
| Язык: C | C++ |
| По умолчанию: Откл. |
Синтаксис командной строки:
SPURIOUS_FAILURE_NOT_WRAPPED_IN_LOOP |
| Воздействие: Низкий |
Find defects (-checkers) | Function that can spuriously wake up not wrapped in loop | Returned value of a sensitive function not checked