pthread_exit () в обработчике сигналов

(Этот вопрос может быть несколько связан сpthread_exit в обработчике сигнала вызывает ошибку сегментации) Яm написание библиотеки предотвращения блокировки, где всегда есть проверяющий поток, выполняющий графическую работу, и проверяет, есть ли взаимоблокировка, если это так, то он сигнализирует об одном из конфликтующих потоков. Когда этот поток ловит сигнал, он освобождает все мьютексы, которые он имеет и выходит. Существует несколько мьютексов ресурсов (очевидно) и один мьютекс критической области, все вызовы для получения, снятия блокировки ресурсов и выполнения вычислений графа должны сначала получить эту блокировку. Теперь проблема идет. С 2 конкурирующими (не считая проверяющего потока) потоками,иногда программа блокируется после уничтожения одного потока. В GDB это 'говорят, что мертвый поток владеет блокировкой критической области, но никогда не снимал ее. После добавления точки останова в обработчике сигнала и перехода,кажется, что блокировка принадлежит кому-то другому (как и ожидалось) прямо перед pthread_exit (), но право собственности волшебным образом переходит к этому потоку после pthread_exit () ..



Единственное предположение, о котором я могу думать, это то, что поток, который нужно убить, блокировал pthread_mutex_lock при попытке получить блокировку критической области (потому что ему требовался другой мьютекс ресурса), затем пришел сигнал, прервавший pthread_mutex_lock. Поскольку этот вызов не защищен от сигнала, что-то странное случилось? Как обработчик сигнала мог вернуться, и этот поток получил блокировку, а затем вышел? ИДК. Любое понимание приветствуется!

Ответы на вопрос(1)

Ваш ответ на вопрос