pthread_join 或 pthread_detach 子例程
用途
阻塞或拆离调用线程,直到指定的线程终止。
库
线程库 (libpthreads.a)
语法
#include <pthread.h>
int pthread_join (thread, status)
pthread_t thread;
void **status;
int pthread_detach (thread)
pthread_t thread;描述
pthread_join 子例程阻塞调用线程,直到线程 thread 终止。 在 status 参数中返回目标线程的终止状态。
如果目标线程已终止,但尚未拆离,那么子例程将立即返回。 即使尚未终止,也无法连接已拆离的线程。 在所有连接的线程都已唤醒后,将自动拆离目标线程。
此子例程本身不会导致线程终止。 它的作用类似于 pthread_cond_wait 子例程以等待特殊情况。
注: pthread.h 头文件必须是使用线程库的每个源文件的第一个包含文件。 否则,应使用 -D_THREAD_SAFE 编译标志,或使用 cc_r 编译器。 在这种情况下,会自动设置标志。
pthread_detach 子例程用于向实现指示,当该线程终止时,可以回收其线程标识位于位置 thread 中的线程的存储器。 无论线程是否已拆离,此存储器都将在进程出口上回收,并且可能包含 thread 返回值的存储器。 如果 线程 尚未终止,那么 pthread_detach 不会导致它终止。 同一目标线程上的多个 pthread_detach 调用会导致错误。
参数
| 项 | 描述 |
|---|---|
| 线程 | 指定目标线程。 |
| 状态 | 指向将存储目标线程的终止状态的位置。 如果值为 NULL,那么不会返回终止状态。 |
返回值
如果成功, pthread_join 函数将返回零。 否则,将返回错误号以指示错误。
错误代码
在下列情况下, pthread_join 和 pthread_detach 函数将失败:
| 项 | 描述 |
|---|---|
| EINVAL | 实现检测到线程指定的值未引用可连接的线程。 |
| ESRCH | 找不到与给定线程标识指定的线程相对应的线程。 |
在下列情况下, pthread_join 函数将失败:
| 项 | 描述 |
|---|---|
| EDEADLK | 线程的值指定调用线程。 |
pthread_join 函数不会返回错误代码 EINTR。