Шлейф проверяет состояние пробуждения после возможного ложного пробуждения
Этот дефект возникает при вызове следующих функций ожидания состояния вне цикла:
Функции C:
cnd_wait()
cnd_timedwait()
Функции POSIX:
pthread_cond_wait()
pthread_cond_timedwait()
C++ std::condition_variable и std::condition_variable_any функции-члены класса:
wait()
wait_until()
wait_for()
Функции ожидания состояния приостанавливают выполнение вызывающего потока при выполнении указанного условия. Поток пробуждается и возобновляется, как только другой поток уведомляет его cnd_broadcast() или эквивалентную функцию. Уведомление о пробуждении может быть ложным или вредоносным.
Если поток получает ложное уведомление о пробуждении и состояние функции ожидания условия не проверяется, поток может пробудиться преждевременно. Пробуждение может вызвать неожиданный поток управления, неопределенное блокирование других потоков или отказ в обслуживании.
Оберните функции ожидания состояния, которые могут ложно проснуться в цикле. Цикл проверяет состояние пробуждения после возможного ложного уведомления пробуждения.
| Группа: Параллелизм |
| Язык: C | C++ |
| По умолчанию: Откл. |
Синтаксис командной строки:
SPURIOUS_WAKEUP_NOT_WRAPPED_IN_LOOP |
| Воздействие: Низкий |
Find defects (-checkers) | Function that can spuriously fail not wrapped in loop | Returned value of a sensitive function not checked