杀死信号处理程序中的线程是一种好习惯(还是安全的方法)?

时间:2019-04-27 23:45:50

标签: c pthreads signal-handling

我正在编写一个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);
}

0 个答案:

没有答案