pthread_kill()
не убьет поток.Единственная разница с kill()
состоит в том, что сигнал обрабатывается назначенным потоком и не обрабатывается, пока этот поток имеет маскированный сигнал (см. pthread_sigmask()
).Сигнал наподобие SIGTERM
по умолчанию все равно завершит весь процесс.
Если вы планируете вызвать pthread_exit()
из обработчика сигнала, вам, вероятно, следует использовать pthread_cancel()
.
Отмена безопасна, если весь код, который может быть отменен, сотрудничает (или код, который вызывает его, отключает отмену на время).Однако большинство библиотек не заботятся об этом.
Более безопасный метод - попросить поток выйти без каких-либо усилий, например, отправив ему специальное сообщение (если поток обычно обрабатывает сообщения).
В качестве альтернативы, не пытайтесь уничтожить какие-либо потоки, просто вызовите _exit()
, _Exit()
или quick_exit()
.