Несколько задач выполняют незащищенные неатомарные операции на совместно используемой переменной
Этот дефект происходит когда:
Несколько задач выполняют незащищенные операции на совместно используемой переменной.
По крайней мере одна задача выполняет операцию записи.
По крайней мере одна операция является неатомарной. Для гонки данных и на атомарных и на неатомарных операциях, смотрите 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 |
Удар: высоко |
ID 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)