Обнаружение тупиков на мьютексах в многопоточных приложениях
УДК 681.3.066
Обнаружение тупиков на мьютексах
в многопоточных приложениях
© В.С. Белоус, В.А. Крищенко, Н.Ю. Рязанова
МГТУ им. <...> Н.Э. Баумана, Москва, 105005, Россия
Статья посвящена разработке метода обнаружения тупиков при использовании в
приложениях мьютексов, реализованных по стандарту POSIX. <...> Показано, что обнаружение замкнутой цепи блокировок соответствует обнаружению цикла в графе запросов — распределений. <...> Описан механизм включения в ядро средств перехвата функции ядра, которая
управляет захватом и освобождением потоков на мьютексах. <...> Предложен алгоритм обнаружения тупика на основе полученной информации. <...> Например, если после выполнения первой строки в коде первого
потока будет прервано его выполнение, то элемент, добавляемый
вторым потоком, может быть утерян (рис. <...> В ОС Linux для
этого могут использоваться такие средства взаимоисключения, как
1 <...> Мьютексы и семафоры являются средствами блокировки процессов, и процессорное время не
тратится на проверку их занятости. <...> Критическая секция кода начинается захватом мьютекса,
а заканчивается его освобождением. <...> В результате код критической
секции становится атомарным или неделимым. <...> Использование мьютексов для реализации атомарности
Если поток пытается войти в критическую секцию, захваченную
другим потоком, то он будет заблокирован до тех пор, пока другой
поток не выйдет из критической секции. <...> Использование средств взаимоисключения приводит к другим
проблемам, основной из которых является взаимоблокировка потоков,
или тупиковая ситуация, возникающая из-за многократного захвата и
освобождения мьютексов в неправильной последовательности. <...> Средства обнаружения
тупиковых ситуаций для прикладных процессов в ОС Linux отсутствуют. <...> 2
Обнаружение тупиков на мьютексах в многопоточных приложениях
Для обнаружения тупиков используется бихроматический направленный граф Холта [2], в котором множество <...>