pthread_exit () w obsłudze sygnału

(To pytanie może być powiązane zpthread_exit w programie obsługi sygnału powoduje błąd segmentacji) Piszę bibliotekę zapobiegania blokadom, gdzie zawsze jest wątek sprawdzający, który wykonuje elementy graficzne i sprawdza, czy występuje zakleszczenie, jeśli tak, to sygnalizuje jeden ze sprzecznych wątków. Gdy ten wątek przechwyci sygnał, zwalnia wszystkie muteksy, które posiada i wychodzi. Istnieje wiele muteksów zasobów (oczywiście) i jeden muteks regionu krytycznego, wszystkie wywołania do pozyskania, zwolnij blokadę zasobów i wykonaj obliczenia graficzne, aby najpierw uzyskać tę blokadę. Teraz pojawia się problem. Z 2 konkurującymi (nie licząc wątku kontrolnego) wątkami,czasami program blokuje się po zabiciu jednego wątku. W gdb mówi, że martwy wątek posiada kluczową blokadę regionu, ale nigdy go nie zwolnił. Po dodaniu punktu przerwania w programie obsługi sygnału i przejściu,wygląda na to, że zamek należy do kogoś innego (zgodnie z oczekiwaniami) tuż przed pthread_exit (), ale własność magicznie przechodzi do tego wątku po pthread_exit () ..

Jedyne, co mogę przypuszczać, to to, że wątek, który ma zostać zabity, blokował się przy pthread_mutex_lock podczas próby uzyskania krytycznej blokady regionu (ponieważ potrzebował innego muteksu zasobu), a następnie nadszedł sygnał, przerywając pthread_mutex_lock. Ponieważ ta rozmowa nie jest odporna na sygnał, stało się coś dziwnego? Jakby program obsługi sygnału mógł powrócić i ten wątek zamknął blokadę? Idk .. Każdy wgląd jest doceniany!

questionAnswers(1)

yourAnswerToTheQuestion