Я пишу программу на 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);
}