Функция блокировки без разблокировала функцию
Пропавшие без вести разблокировали, происходит когда:
Задача вызывает функцию блокировки.
Задача заканчивается без вызова разблокировать функции.
В многозадачном коде функция блокировки начинает критический раздел кода, и разблокировать функция заканчивает его. Когда задача, my_task
, вызывает функцию блокировки, my_lock
, другие задачи, вызывая my_lock
должны ожидать до вызовов my_task
соответствие разблокировало функцию. Polyspace® требует, чтобы и блокировка и разблокировала функции, должен иметь форму void func(void)
.
Чтобы найти этот дефект, перед анализом, необходимо задать многозадачные опции. На панели Configuration выберите Multitasking.
Разблокировать функция заканчивает критический раздел так, чтобы другие ожидающие задачи могли ввести критический раздел. Отсутствие разблокировало функцию, может привести к задачам, блокированным в течение ненужного отрезка времени.
Идентифицируйте критический раздел кода, то есть, раздел, что вы хотите быть выполненными как атомарный блок. В конце этого раздела вызовите разблокировать функцию, которая соответствует функции блокировки, используемой в начале раздела.
Могут быть другие причины и соответствующие меры для дефекта. Возможно, вы вызвали неправильное, разблокировали функцию. Проверяйте, что блокировка - разблокировала функциональную пару в вашей аналитической настройке Polyspace и фиксирует несоответствие.
Смотрите примеры мер ниже. Чтобы избежать проблемы, можно применить практику вызова блокировки и разблокировать функции в том же модуле на том же уровне абстракции. Например, в этом примере, func
вызывает блокировку, и разблокируйте функцию на том же уровне, но func2
не делает.
void func() { my_lock(); { ... } my_unlock(); } void func2() { { my_lock(); ... } my_unlock(); }
Если вы не хотите устранять проблему, добавьте комментарии в свой результат или код, чтобы избежать другого анализа. Смотрите Результаты Polyspace Адреса Через Исправления ошибок или Комментарии.
Группа: параллелизм |
Язык: C | C++ |
Значение по умолчанию: на |
Синтаксис командной строки: BAD_LOCK |
Влияние: высоко |
ID CWE: 667 |
Configure multitasking manually
| Critical section details (-critical-section-begin -critical-section-end)
| Data race
| Data race including atomic operations
| Data race through standard library function call
| Deadlock
| Destruction of locked mutex
| Double lock
| Double unlock
| Find defects (-checkers)
| Missing lock
| Tasks (-entry-points)
| Temporally exclusive tasks (-temporal-exclusions-file)