exponenta event banner

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

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

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

Анализ многозадачных программ в многозадачном пространстве

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

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

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