PTHREAD_JOIN - Linux手册页
Linux程序员手册 第3部分
更新日期: 2020-06-09
名称
pthread_join-与终止的线程连接
语法
#include <pthread.h> int pthread_join(pthread_t thread, void **retval);
编译并链接-pthread。
说明
pthread_join()函数等待线程指定的线程终止。如果该线程已经终止,则pthread_join()立即返回。线程指定的线程必须是可连接的。
如果retval不为NULL,则pthread_join()将目标线程的退出状态(即目标线程提供给pthread_exit(3)的值)复制到retval指向的位置。如果目标线程被取消,则将PTHREAD_CANCELED放置在retval指向的位置。
如果多个线程同时尝试与同一线程联接,则结果是不确定的。如果取消调用pthread_join()的线程,则目标线程将保持可连接状态(即,不会被分离)。
返回值
成功时,pthread_join()返回0;否则,返回0。如果出错,则返回错误号。
错误说明
- EDEADLK
- 检测到死锁(例如,两个线程试图相互连接);或thread指定调用线程。
- EINVAL
- 线程不是可连接线程。
- EINVAL
- 另一个线程已经在等待加入该线程。
- ESRCH
- 找不到具有ID线程的线程。
属性
有关本节中使用的术语的说明,请参见attribute(7)。
Interface | Attribute | Value |
pthread_join() | Thread safety | 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手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。