Функция pthread_detach делает данный поток отсоединенным:
#include <pthread.h>
int pthread_detach(pthread_t tid);
/* Возвращает 0 в случае успешного завершения, положительное значение Еххх в случае ошибки */
Эта функция вызывается потоком при необходимости изменить собственный статус в форме
pthread_detach(pthread_self);
Функция pthread_exit
Одним из способов завершения потока является вызов pthread_exit:
#include <pthread.h>
void pthread_exit(void *status);
/* ничего не возвращает вызвавшему потоку */
Если поток не является отсоединенным, его идентификатор и статус завершения сохраняются для возвращения другому потоку, который может вызвать pthread_join.
Указатель status не должен быть установлен на локальный объект вызвавшего потока (типа автоматической переменной), поскольку этот объект уничтожается при завершении потока.
Поток может быть завершен двумя другими способами:
■ начальная функция потока (третий аргумент pthread_create) может вызвать return. Поскольку эта функция должна объявляться как возвращающая указатель на тип void, это возвращаемое значение становится статусом завершения потока;
■ функция main процесса может завершить работу или один из потоков может вызвать exit или _exit. При этом процесс завершает работу немедленно, вместе со всеми своими потоками.
ПРИЛОЖЕНИЕ В
Вспомогательные исходные коды
В.1. Заголовочный файл unpipc.h
Почти все программы книги подключают заголовочный файл unpipc.h, приведенный в листинге В.1. [1] Он подключает все стандартные системные заголовки, нужные большинству пpoгрaмм для работы с сетью, вместе с некоторыми общими системными заголовками. Он также определяет константы типа MAXLINE и прототипы функций ANSI С для функций, определенных в тексте (типа px_ipc_name), и для всех используемых в книге оберток. Мы не приводим эти прототипы.
1
Все исходные тексты, опубликованные в этой книге, вы можете найти по адресу http://www.piter.com/download.