Сигналы отправляются процессу в целом.Каждый сигнал, отправленный процессу, принимается одним потоком (от имени всей программы).Существуют маски сигналов для каждого потока, которые влияют на то, подходит ли конкретный поток для обработки определенного сигнала.
Итак, вам нужен обработчик сигнала - возможно, только в одном потоке.Обратите внимание, что существуют ограничения на то, что вы должны делать в обработчике сигналов потока.Будьте осторожны, выходя далеко за рамки обещаний, данных стандартом (которые минимальны).
Однако функцию pthread_kill()
можно использовать для отправки сигналов другим потокам, еслитекущий поток может идентифицировать (имеет доступ к значениям идентификатора потока (pthread_t
), которые идентифицируют) потоки, которые все еще выполняются в процессе.Вы можете решить передать сигнал другим потокам, используя номер сигнала, отличный от первоначально отловленного (поэтому один поток получает внешний сигнал, но многие потоки получают внутренний сигнал).Или вместо сигналов вы можете использовать другой примитив синхронизации или связи Pthread.