pthread_join вызывает завершение при принятии () - PullRequest
2 голосов
/ 09 июня 2011

У меня есть присоединенный серверный поток, заблокированный в методе accept (), ожидающем подключения. Внешне я пытаюсь завершить поток, вызывая pthread_cancel (), а затем pthread_join (). После вызова соединения моя программа завершается с SIGABRT.

Я, скорее всего, собираюсь отсоединить поток и сделать его select () с тайм-аутом для проверки соединений, чтобы я мог затем "дать сигнал" ему выйти. Итак, я знаю, что это решение, но, будучи любопытным, мне было интересно, почему первое решение не работает.

1 Ответ

0 голосов
/ 29 июня 2011

Я думаю, вы получаете завершение программы SIGABRT из-за pthread_cancel () - когда заблокированный поток получает сигнал, он, вероятно, умирает.Доставка сигнала не происходит до тех пор, пока не вернется вызов pthread_cancel (), так что похоже, что это происходит из-за вызова join.

Чтобы проверить и убедиться, что мои мысли верны, я вставил бынекоторое время (1);цикл после pthread_cancel (), чтобы увидеть, если вы все еще получаете SIGABRT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...