Почему этот поток продолжает выполнение, хотя я его убиваю???
pthread_t pid;
pthread_create(&pid, NULL, (func)countdown, NULL);
pthread_kill(pid, 1);
pthread_join(pid, NULL);
pthread_kill
- функция отправки сигналов в поток. Вы в настоящее время посылаете ему сигнал 1
, который является SIGHUP
. Стандартными сигналами для запроса или принудительного прекращения являются SIGTERM
и SIGKILL
, которые равны соответственно 15
и 9
.
Кроме того, вы должны использовать константы, а не магические числа для отправки сигналов. Они определены в signal.h
. Документация по сигналам даст вам более подробную информацию.
Обновление: Комментарий от nos, правильный способ прекращения потоков (а не всего приложения) - использовать pthread_cancel
. Использование описанного выше pthread_kill
будет иметь тенденцию убивать весь процесс, если принимающий поток не регистрирует обработчик сигнала.