Поток может прерваться несколькими способами. Первый способ предполагает возвращение управления из основной процедуры потока start_routine . Второй способ - вызов pthread_exit (), возвращающий статус выхода. Третий способ - прерывание потока с помощью функции pthread_cancel ().
Функция void pthread_exit(void *status) прерывает выполнение потока точно так же, как функция exit () прерывает процесс:
#include <pthread.h>
int status;
/* выход возвращает статус status */
pthread_exit(&status);
Функция pthread_exit () заканчивает выполнение вызвавшего ее потока. Все привязки данных для этого потока освобождаются. Если вызывающий поток не отделен, то ID этого потока и статус выхода ( status ) сохраняются, пока поток блокирован. В противном случае, статус игнорируется, а ID потока может быть немедленно использован для другого потока.
Функция pthread_cancel () предназначена для прерывания потока:
#include <pthread.h>
pthread_t thread;
int ret;
ret = pthread_cancel(thread);
Способ обработки запроса на прерывание потока зависит от состояния указанного потока. Две функции, pthread_setcancelstate () и pthread_setcanceltype (), определяют это состояние; функция pthread_cancel () возвращает 0 в случае успешного завершения, или другое значение в случае ошибки.
Операционные системы