Несколько задач выполняют незащищенные неатомные операции с общей переменной
Этот дефект возникает в следующих случаях:
Несколько задач выполняют незащищенные операции с общей переменной.
По меньшей мере одна задача выполняет операцию записи.
По меньшей мере одна операция является неатомной. Информацию о гонке данных по атомным и неатомным операциям см. в разделе Data race including atomic operations.
См. раздел Определение атомных операций в многозадачном коде.
Чтобы найти этот дефект, перед анализом необходимо указать параметры многозадачности. Чтобы задать эти параметры, на панели Конфигурация выберите Многозадачность. Дополнительные сведения см. в разделе Настройка многозадачного анализа в многозадачном пространстве вручную.
Гонка данных может привести к непредсказуемым значениям общей переменной, поскольку вы не контролируете порядок операций в различных задачах.
Гонки данных между двумя операциями записи более серьезны, чем гонки данных между операцией записи и операцией чтения. Две операции записи могут создавать помехи друг другу и приводить к неопределенным значениям. Чтобы определить конфликты записи, используйте фильтры в столбце Подробности (Detail) панели Список результатов (Results List). Для этих конфликтов в столбце Подробно (Detail) отображается дополнительная строка:
Variable value may be altered by write-write concurrent access.
Чтобы устранить этот дефект, защитите операции над общей переменной с помощью критических разделов, временного исключения или другого средства. См. раздел Защита общих переменных в многозадачном коде.
Чтобы определить существующие защиты, которые можно использовать повторно, см. таблицу и графики, связанные с результатом. В таблице показаны все пары конфликтующих вызовов. В столбце Access Protections отображаются существующие защиты для вызовов. Для просмотра последовательности вызовов функции, приводящей к конфликтам, щелкните
по пиктограмме. Пример см. ниже.
| Группа: Параллелизм |
| Язык: C | C++ |
| По умолчанию: Вкл. |
Синтаксис командной строки: DATA_RACE |
| Воздействие: Высокое |
| CWE ID: 366, 413 |
Configure multitasking manually | Critical section details (-critical-section-begin -critical-section-end) | Data race including atomic operations | 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 | Target processor type (-target) | Tasks (-entry-points) | Temporally exclusive tasks (-temporal-exclusions-file)