Дефекты параллелизма

Дефекты связаны с многозадачным кодом

Эти средства проверки обнаруживают проблемы, связанные с многозадачным кодом, такие как гонки данных, где несколько задач работают с незащищенной переменной или блокирующими дефектами, где критические разделы вовлечены в мертвую блокировку. Polyspace может обнаружить поток и критические разделы в вашем коде, или можно вручную задать тех в настройке Polyspace.

Результаты Polyspace

развернуть все

Asynchronously cancellable threadВызывающий поток может быть отменен в небезопасном состоянии
Atomic load and store sequence not atomicПеременная, доступная между загрузкой и операциями хранилища
Atomic variable accessed twice in an expressionПеременная может быть изменена между доступами
Automatic or thread local variable escaping from a threadПеременная передается от одного потока до другого, не гарантируя, что переменная остается в живых через длительность последнего потока
Blocking operation while holding lockЗадача выполняет долгую операцию при содержании блокировки
Data raceНесколько задач выполняют незащищенные неатомарные операции на совместно используемой переменной
Data race including atomic operationsНесколько задач выполняют незащищенные операции на совместно используемой переменной
Data race on adjacent bit fieldsНесколько потоков выполняют незащищенные операции на смежных битовых полях структуры разделяемых данных
Data race through standard library function callНесколько задач выполняют незащищенные вызовы к небезопасной потоком стандартной библиотечной функции
DeadlockВызовите последовательность, чтобы заблокировать причину функций две задачи блокировать друг друга
Destruction of locked mutexЗадача пытается уничтожить взаимное исключение в заблокированном состоянии
Double lockФункция блокировки вызвана дважды в задаче без промежуточного вызова, чтобы разблокировать функцию
Double unlockРазблокируйте функцию, называется дважды в задаче без промежуточного вызова, чтобы заблокировать функцию
Function that can spuriously fail not wrapped in loopЦикл проверяет условие отказа после возможного побочного отказа
Function that can spuriously wake up not wrapped in loopЦикл проверяет условие пробуждения после возможного побочного пробуждения
Join or detach of a joined or detached threadРаспараллельте, к которому ранее соединили или отсоединился, соединен или отсоединен снова
Missing lockРазблокируйте функцию без функции блокировки
Missing or double initialization of thread attributeДублированная инициализация потока приписывает или неинициализированный атрибут потока, используемый в функциях, которые ожидают инициализированные атрибуты
Missing unlockФункция блокировки без разблокировала функцию
Multiple mutexes used with same condition variableПотоки с помощью различных взаимных исключений, когда одновременно ожидание на той же условной переменной является неопределенным поведением
Multiple threads waiting on same condition variableИспользуя cnd_signal разбудить один из потоков может привести к неопределенному блокированию
Signal call in multithreaded programПрограмма с несколькими потоками использует signal функция
Thread-specific memory leakДинамически выделенная специфичная для потока память, не освобожденная перед концом потока
Use of signal killing threadНепойманный сигнал уничтожает целый процесс вместо определенного потока
Use of undefined thread IDРаспараллельте ID от не пройдено создания потока, используемого в последующих функциях потока

Темы

Группы дефекта Bug Finder

Средства проверки дефекта Bug Finder классифицируются в группы, такие как поток данных, параллелизм, числовой, и так далее.

Анализируйте многозадачные программы в Polyspace

Обнаружьте гонки данных или мертвые блокировки, или смотрите всесторонний анализ использования совместно используемой переменной.

Меры защиты для совместно используемых переменных в многозадачном коде

Защитите совместно используемые переменные при помощи критического раздела, временного исключения, приоритетов или запрета прерываний.