Несколько задач выполняют незащищенные неатомные операции с общей переменной
Этот дефект возникает, когда:
Несколько задач выполняют незащищенные операции с общей переменной.
По меньшей мере одна задача выполняет операцию записи.
По крайней мере, одна операция неатомна. Для гонки данных как атомарных, так и неатомных операций смотрите Data race including atomic operations
.
Чтобы найти этот дефект, перед анализом необходимо задать опции многозадачности. Чтобы задать эти опции, на панели Configuration выберите Multitasking. Для получения дополнительной информации смотрите Настройка многозадачного анализа Polyspace вручную.
Гонка данных может привести к непредсказуемым значениям общей переменной, потому что вы не управляете порядком операций в различных задачах.
Гонки данных между двумя операциями записи более серьезны, чем гонки данных между операцией записи и чтения. Две операции записи могут мешать друг другу и приводить к неопределенным значениям. Чтобы идентифицировать конфликты записи и записи, используйте фильтры в Detail столбце панели Results List. Для этих конфликтов в Detail столбце показана дополнительная линия:
Variable value may be altered by write-write concurrent access.
Чтобы исправить этот дефект, защитите операции с общей переменной с помощью критических разделов, временного исключения или других средств. См. «Защита общих переменных в многозадачном коде».
Чтобы идентифицировать существующие защиты, которые можно повторно использовать, смотрите таблицу и графики, связанные с результатом. В таблице показаны каждая пара конфликтующих вызовов. В Access Protections столбце показаны существующие средства защиты вызовов. Чтобы увидеть последовательность вызовов функций, ведущую к конфликтам, щелкните значок. Пример см. ниже.
Группа: Параллелизм |
Язык: C | C++ |
По умолчанию: On |
Синтаксис командной строки: DATA_RACE |
Влияние: Высокий |
ИДЕНТИФИКАТОР CWE: 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)