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

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

Эти шашки обнаруживают проблемы, связанные с многозадачным кодом, такие как гонки данных, где несколько задач работают с незащищенной переменной, или дефекты блокировки, где критические разделы участвуют в взаимоблокировке. 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Идентификатор потока из неудачного создания потока, используемый в последующих функциях потока

Темы

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

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

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

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

Защиты для общих переменных в многозадачном коде

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