Высказывалось мнение о необязательности использования функции pthread_detach (): поскольку поток никогда динамически не отсоединяется, то достаточно использовать атрибут создания потока detachstate. Однако необходимость в этой функции возникает по крайней мере в двух случалх.
1. В обработчике запроса на отмену для функции присоединения потока (pthread__join()) важно иметь функцию pthread_detach(), чтобы отсоединить поток. Без нее обработчик вынужден был бы выполнить еще раз функцию pthread_j oin (), чтобы попытаться отсоединить поток, который не только задерживает процедуру отмены в течение неограниченного времени, но и вносит новый вызов функции pthread_join(). В этом случае есть смысл говорить о динамическом отсоединении.
2. Чтобы отсоединить «исходный поток» (это может понадобиться в процессах, которые создают потоки сервера).
Будущие направления
Отсутствуют.
Смотри также
pthread_join (), том Base Definitions стандарта IEEE Std 1003.1-2001, .
Последовательность внесения изменений
Функция впервые реализована в выпуске Issue 5. Включена д ля согласования с расширение м POSIX Threads Extension.
Issue 6
Функция pthread_detach () отмечена как часть опции Threads.
Имя
pthread_exit — функция завершения потока.
Синопсис
THR #include
void pthread_exit (void *va2ue_ptr);
Описание
Функция pthread_exit() завершает вызывающий поток и делает значение value _ptr доступны м для успешного присоединения к завершающе м у потоку Любые обработчики отмены, которые были помещены в стек, но еще не извлечены из него, будут извлечены в порядке, обратном тому, в котором они помещались туда, а затем выполнены. Если потоку принадлежат данные, то после выполнения всех обработчиков отмены булут вызваны соответствующие функции деструкторов (в неопределенном порядке). При завершении потока ресурсы процесса, включая мьютексы и дескрипторы файлов, не освобождаются, и не выполняются какие бы то ни было «восстановительные» действия уровня процесса, включал вызовы любых функций atexit(), какие только могут существовать.
Когда из функции запуска возвращается поток, отличный от того, в котором была изначально вызвана функция main(), делается неявное обращение к функции pthread_exit(). Значение, возвращаемое этой функцией, служит в качестве состояния выхода этого потока.
Поведение функции pthread_exit () не определено, если она вызвана из обработчика запроса на отмену потока или функции деструктора, к которой было сделано обращение в результате явного или неявного вызова функции pthread_exit ().