说明

pthread_join()函数等待线程指定的线程终止。如果该线程已经终止,则pthread_join()立即返回。线程指定的线程必须是可连接的。

如果retval不为NULL,则pthread_join()将目标线程的退出状态(即目标线程提供给pthread_exit(3)的值)复制到retval指向的位置。如果目标线程被取消,则将PTHREAD_CANCELED放置在retval指向的位置。

如果多个线程同时尝试与同一线程联接,则结果是不确定的。如果取消调用pthread_join()的线程,则目标线程将保持可连接状态(即,不会被分离)。

语法

#include <pthread.h>

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

编译并链接-pthread。

PTHREAD_JOIN - Linux手册页

Linux程序员手册 第3部分
更新日期: 2020-06-09

示例

请参见pthread_create(3)。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

备注

成功调用pthread_join()之后,可以确保调用方目标线程已终止。然后,调用者可以选择执行线程终止后所需的任何清理操作(例如,释放分配给目标线程的内存或其他资源)。

使用先前已连接的线程进行连接会导致未定义的行为。

无法与可连接的线程(即未分离的线程)连接会产生"僵尸线程"。避免这样做,因为每个僵尸线程都会消耗一些系统资源,并且当积累了足够多的僵尸线程时,将不再可能创建新的线程(或进程)。

没有waitpid(-1,&status,0)的pthreads类似物,即"与任何终止的线程连接"。如果您认为需要此功能,则可能需要重新考虑应用程序设计。

进程中的所有线程都是对等的:任何线程都可以与该进程中的任何其他线程连接。

返回值

成功时,pthread_join()返回0;否则,返回0。如果出错,则返回错误号。

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
pthread_join()Thread safetyMT-Safe

错误说明

EDEADLK
检测到死锁(例如,两个线程试图相互连接);或thread指定调用线程。
EINVAL
线程不是可连接线程。
EINVAL
另一个线程已经在等待加入该线程。
ESRCH
找不到具有ID线程的线程。

名称

pthread_join-与终止的线程连接

遵循规范

POSIX.1-2001,POSIX.1-2008。

日期:2019-08-20 18:01:03 来源:oir作者:oir