ИМХО, сигналы Unix V и потоки posix плохо смешиваются.
Unix V 1970. POSIX 1980;)
Существуют точки отмены, и если вы разрешите сигналы и потоки в одном приложении, вы в конечном итоге получите циклы вокруг каждого вызова, что может неожиданно вернуть EINTR.
То, что я делал в (нескольких) случаях, когда мне приходилось программировать многопоточность в Linux или QNX, было для маскировки всех сигналов для всех (кроме одного) потоков.
Когда поступает сигнал Unix V, процесс переключает стек (это было столько параллелизма в Unix V, сколько вы могли получить в процессе).
Как подсказывают другие посты, теперь можно сказать Системе, какой поток posix должен стать жертвой переключения стека.
Как только вам удалось запустить поток обработчика сигналов, остается вопрос, как преобразовать информацию о сигналах в нечто цивилизованное, что могут использовать другие потоки. Требуется инфраструктура для связи между потоками. Одним из полезных шаблонов является шаблон субъекта, где каждый из ваших потоков является целью для какого-либо внутрипроцессного механизма обмена сообщениями.
Таким образом, вместо того, чтобы отменять другие потоки или убивать их (или другие странные вещи), вы должны попытаться маршалировать Сигнал из контекста Сигнала в ваш поток обработчика Сигнала, а затем использовать свои механизмы связи шаблонов акторов для отправки семантически полезных сообщений те актеры, которым нужна информация, связанная с сигналом.