pthread_join()

Ожидание завершения потока

Прототип:

#include <pthread.h>
int pthread_join( pthread_t thread,
void **value_ptr );

Аргументы:

thread
Целевой поток, чьего терминирования требуется дождаться.
value_ptr
NULL или указатель на переменную, где функция может хранить значение, которое возвращает pthread_exit().

Библиотека:

libc

Описание:

Функция pthread_join() блокирует вызывающий поток в ожидании терминирования потока thread до тех пор, пока последний не терминируется. Если указатель value_ptr не равен NULL и pthread_join() завершается успешно, то по этому адресу записывается аргумент функции pthread_exit(). Если целевой поток прерывается, а не завершается, value_ptr устанавливается в значение PTHREAD_CANCELED.


Note: Не-POSIX функция pthread_timedjoin() отличается от pthread_join() только тем, что прерывает ожидание с ошибкой, если поток не завершится за указанное время.

Целевой поток должен иметь статус joinable. Множественный вызов pthread_join(), pthread_timedjoin(), ThreadJoin() и ThreadJoin_r() на один и тот же поток не допускается. Если pthread_join() завершается успешно – это означает, что поток завершился успешно.

Возвращаемое значение:

EOK
Успешное завершение.
EBUSY
Поток thread уже имеет ожидающую блокировку.
EDEADLK
Поток thread соответствует вызывающему.
EFAULT
При доступе к предоставленным буферам произошла ошибка.
EINVAL
Поток thread не имеет статуса joinable.
ESRCH
Поток thread не существует.

Классификация:

POSIX 1003.1 Threads

Безопасность использования
Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

pthread_create(), pthread_detach(), pthread_exit(), pthread_timedjoin(), ThreadJoin(), ThreadJoin_r()




Предыдущий раздел: Описание API системной библиотеки