pthread_join -
присоединение
к
завершённой
нити
POSIX threads library (
libpthread,
-lpthread)
#include <pthread.h>
int pthread_join(pthread_t thread, void **retval);
Функция
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)
Русский
перевод
этой
страницы
руководства
был сделан
Alexey, Azamat Hackimov <
[email protected]>, kogamatranslator49
<
[email protected]>, Kogan, Max Is <
[email protected]>, Yuri
Kozlov <
[email protected]> и Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]