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