Несколько задач выполняют незащищенные операции на совместно используемой переменной
Этот дефект происходит когда:
Несколько задач выполняют незащищенные операции на совместно используемой переменной.
По крайней мере одна задача выполняет операцию записи.
Если вы проверяете на этот дефект, вы видите гонки данных и на атомарных и на неатомарных операциях. Чтобы видеть гонки данных на одних только неатомарных операциях, выберите Data race
. Bug Finder рассматривает операцию как атомарную, если он может быть выполнен в одной машинной команде. Например, операция:
int var = 0;
int
меньше размера слова на цели (или размера указателя). Смотрите Задают Атомарные Операции в Многозадачном Коде. Если вы не хотите использовать это определение атомарных операций, включите это средство проверки.Чтобы найти этот дефект, необходимо задать многозадачные опции перед анализом. Смотрите Многозадачность. Если ваш код не использует критические разделы вообще, чтобы не отмечать слишком много операций, это средство проверки отключено. Чтобы отметить гонки данных, включающие только атомарные операции, используйте опцию -force-data-races
.
Гонка данных может привести к непредсказуемым значениям совместно используемой переменной, потому что вы не управляете порядком операций в различных задачах.
Чтобы зафиксировать этот дефект, защитите операции на совместно используемой переменной с помощью критических разделов, временного исключения, или другой означает. Смотрите Меры защиты для Совместно используемых переменных в Многозадачном Коде.
Чтобы идентифицировать существующие меры защиты, которые можно снова использовать, см. таблицу и графики, сопоставленные результатом. Таблица показывает каждую пару конфликтных вызовов. Столбец Access Protections показывает существующие меры защиты на вызовах. Чтобы видеть, что последовательность вызова функции ведет к конфликтам, кликните по значку. Для примера смотрите ниже.
Группа: параллелизм |
Язык: C | C++ |
Значение по умолчанию: Off |
Синтаксис командной строки: DATA_RACE_ALL |
Удар: Средняя |
ID CWE: 366, 413 |
Configure multitasking manually
| Critical section details (-critical-section-begin -critical-section-end)
| Data race
| Data race through standard library function call
| Deadlock
| Destruction of locked mutex
| Disabling all interrupts (-routine-disable-interrupts -routine-enable-interrupts)
| Double lock
| Double unlock
| Find defects (-checkers)
| Missing lock
| Missing unlock
| Tasks (-entry-points)
| Temporally exclusive tasks (-temporal-exclusions-file)