pthread_join

PTHREAD_JOIN(3)          Руководство программиста Linux          PTHREAD_JOIN(3)



ИМЯ
       pthread_join - присоединение к завершённой нити

ОБЗОР
       #include <pthread.h>

       int pthread_join(pthread_t thread, void **retval);

       Компилируется и компонуется вместе с -pthread.

ОПИСАНИЕ
       Функция pthread_join() ждёт завершения нити, указанной в thread. Если
       нить уже завершила работу, то pthread_join() завершается сразу. Нить,
       задаваемая в thread, должна позволять присоединение.

       Если retval не равно NULL, то pthread_join() копирует код выхода нити
       назначения (т. е., значение, которое нить назначения передала через
       pthread_exit(3)) в расположение по указателю retval.  Если нить
       назначения была отменена, то в расположение по указателю retval
       помещается значение PTHREAD_CANCELED.

       Если к одной нити одновременно пытаются присоединиться несколько нитей,
       то результат не определён. Если нити вызвавшая pthread_join(),
       отменяется, то нить назначения остаётся доступной для присоединения (т.
       е., не будет отсоединена).

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
       При успешном выполнении pthread_join() возвращается 0; при ошибке
       возвращается номер ошибки.

ОШИБКИ
       EDEADLK
              Обнаружена взаимная блокировка (например, когда две нити пытаются
              присоединиться друг к другу); или в thread указана вызывающая
              нить.

       EINVAL Нить thread не является присоединяемой.

       EINVAL Другая нить уже ждёт присоединения к этой нити.

       ESRCH  Нить с идентификатором thread не найдена.

АТРИБУТЫ
       Описание терминов данного раздела смотрите в attributes(7).

       ┌───────────────┬──────────────────────┬──────────┐
       │Интерфейс      Атрибут              Значение │
       ├───────────────┼──────────────────────┼──────────┤
       │pthread_join() │ Безвредность в нитях │ MT-Safe  │
       └───────────────┴──────────────────────┴──────────┘

СООТВЕТСТВИЕ СТАНДАРТАМ
       POSIX.1-2001, POSIX.1-2008.

ЗАМЕЧАНИЯ
       После успешного выполнения pthread_join() вызывающему гарантируется, что
       целевая нить завершила работу. Вызывающий теперь может сделать нужные
       после завершения нити операции по очистке (например, освободить память
       или другие ресурсы, которые использовались целевой нитью).

       Присоединение к нити, из которой уже был получен результат присоединения,
       приводит к непредсказуемым последствиям.

       Ошибка присоединения к нити, доступной для присоединения (т. е., не
       отсоединённой), создаёт «нить-зомби». Лучше их избегать, так как
       нить-зомби потребляет некоторые системные ресурсы, и когда накапливается
       много нитей-зомби становится невозможно создание новых нитей (или
       процессов).

       Аналога waitpid(-1, &status, 0) в pthreads не существует, то есть
       присоединиться к любой завершившейся нити». Если вы уверены, что вам
       нужна такая возможность, то, вероятно, стоит пересмотреть проект
       приложения.

       Все нити в процессе равноправны: любая нить может присоединиться к любой
       другой нити процесса.

ПРИМЕР
       Смотрите pthread_create(3).

СМОТРИТЕ ТАКЖЕ
       pthread_cancel(3), pthread_create(3), pthread_detach(3), pthread_exit(3),
       pthread_tryjoin_np(3), pthreads(7)



Linux                              2015-07-23                    PTHREAD_JOIN(3)