我正在编写一个C程序,其中主线程正在创建两个线程。每当程序接收到SIGINT信号时,我都想杀死两个子线程,之后主线程执行pthread_join并继续执行。为此,我为SIGINT设置了信号处理程序,它将使用pthread_cancel杀死两个线程。 这样做安全还是被认为是一种好习惯?如果不是,那么正确的方法是什么?
/* recvT and sendT are the thread ids */
/* Signal Handler for SIGINT */
void sessionKiller(int signal_val)
{
if(pthread_cancel(recvT) != 0)
{
perror("Thread cancellation failed.");
fflush(stderr);
exit(EXIT_FAILURE);
}
if(pthread_cancel(sendT) != 0)
{
perror("Thread cancellation failed.");
exit(EXIT_FAILURE);
}
signal(SIGINT,SIG_DFL);
}