Что происходит, когда SIGCANCEL отправляется потоку?

#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 .