Является ли хорошей практикой (или безопасной) уничтожение потоков из обработчика сигналов? - PullRequest
0 голосов
/ 28 апреля 2019

Я пишу программу на 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...