#linux #multithreading #signals
#linux #многопоточность #сигналы
Вопрос:
Что происходит в многопоточной среде, когда SIGCANCEL отправляется потоку?
В чем будет разница в поведении, если SIGKILL отправляется в поток?
Комментарии:
1. Я не думаю, что
SIGCANCEL
это вообще поддерживается в Linux. Я знаю, что POSIX не рекомендует его.
Ответ №1:
SIGCANCEL
В настоящее время используемый (внутренне) в glibc
реализации pthread определяется как __SIGRTMIN
.
Если pthread_cancel()
вызывается для потока, для которого установлен тип отмены asynchronous, он отключается, будучи отправленным __SIGRTMIN
через tgkill()
.
В обратном случае это может означать, что принимающий поток __SIGRTMIN
будет вести себя так, как если бы он был отменен асинхронно. (Я не тестировал это)
Ответ №2:
Как сказал Трэвис, SIGCANCEL
был устаревшим и не существует в стандарте POSIX.
Комментарии:
1. В файле glibc-2.9 /nptl /pthread_cancel.c я смог найти, что используется SIGCANCEL . Поэтому мне было интересно узнать о функциональности. Итак, что именно происходит, когда вы вызываете pthread_cancel() ?
2. @notytony Да, похоже, что он все еще существует в glibc 2.9, но если вы посмотрите на справочные страницы ядра, его там нет . У меня нет опыта работы с pthread, но, похоже, это не ваш стандартный сигнал. Небольшая часть документации, которую я прочитал, указывает, что она используется для отправки сигнала потоку, который находится в том же процессе, что и вызывающий. Возможно, вы захотите сравнить pthread_cancel с pthread_kill .