перехват SIGINT в многопоточной программе - PullRequest
7 голосов
/ 06 июня 2011

Я пишу многопоточную программу, в которой я хочу обработать возможную команду Ctrl-C от пользователя для прекращения выполнения.Насколько я знаю, нет никакой гарантии, что основной поток, который может отменить каждый рабочий поток, поймает сигнал.Поэтому необходимо ли иметь другой обработчик сигнала в коде рабочего потока, чтобы кто-нибудь перехватил сигнал, если он поступит, или есть другой способ сделать это, имея обработчик сигнала только в коде основного потока?

1 Ответ

8 голосов
/ 06 июня 2011

Вы можете заблокировать сигналы из вызывающего потока с помощью pthread_sigmask ().

И, поскольку заблокированные сигналы наследуются вновь созданным потокам, вы можете заблокировать SIGINT в главном потоке, затем запустить другие потоки и затем разблокировать его в главном потоке, если это предпочтительнее.

...