Несколько задач выполняют незащищенные операции с общей переменной
Этот дефект возникает, когда:
Несколько задач выполняют незащищенные операции с общей переменной.
По меньшей мере одна задача выполняет операцию записи.
Если вы проверяете на этот дефект, вы можете увидеть гонки данных как на атомарных, так и неатомных операциях. Чтобы увидеть гонки данных только на неатомных операциях, выберите Data race
. Bug Finder рассматривает операцию как атомарную, если ее можно выполнить в одной машинной инструкции. Для образца операция:
int var = 0;
int
меньше, чем размер слова на целевом объекте (или размер указателя). См. «Определение атомарных операций в многозадачном коде». Если вы не хотите использовать это определение атомарных операций, включите эту проверку.Чтобы найти этот дефект, перед анализом необходимо задать опции многозадачности. См. Многозадачность. Если ваш код вообще не использует критические разделы, чтобы избежать маркировки слишком многих операций, эта проверка отключена. Чтобы пометить гонки данных, включающие только атомарные операции, используйте опцию -force-data-races
.
Гонка данных может привести к непредсказуемым значениям общей переменной, потому что вы не управляете порядком операций в различных задачах.
Чтобы исправить этот дефект, защитите операции с общей переменной с помощью критических разделов, временного исключения или других средств. См. «Защита общих переменных в многозадачном коде».
Чтобы идентифицировать существующие защиты, которые можно повторно использовать, смотрите таблицу и графики, связанные с результатом. В таблице показаны каждая пара конфликтующих вызовов. В Access Protections столбце показаны существующие средства защиты вызовов. Чтобы увидеть последовательность вызовов функций, ведущую к конфликтам, щелкните значок. Пример см. ниже.
Группа: Параллелизм |
Язык: C | C++ |
По умолчанию: Off |
Синтаксис командной строки: DATA_RACE_ALL |
Влияние: Средний |
ИДЕНТИФИКАТОР 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)