Когда ядро подает сигнал, ориентированный на процесс, оно выбирает один из потоков , для которого сигнал не заблокирован . Это означает, что он никогда не выбирает ни один из потоков, кроме потока обработки сигнала (который действует так, как если бы сигнал был разблокирован, пока он заблокирован в sigwaitinfo()
или аналогичном). Другими словами: ядро знает, куда доставить сигнал, потому что вы организовали такие вещи, что поток обработки сигналов является единственным потоком, которому когда-либо разрешено доставлять сигнал.
Вы не используете API-интерфейс pthreads или любые не асинхронно-безопасные функции сигнала в обработчике сигналов. Описанное решение не обрабатывает сигналы в обработчиках сигналов - оно обрабатывает сигналы в нормальном потоке выполнения потока обработки сигналов после возврата sigwaitinfo()
. Это позволяет ему получать доступ к функциям, не асинхронно защищенным от сигналов, что и составляет весь смысл.