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_joinpthread_detach 函数将失败:

描述
EINVAL 实现检测到线程指定的值未引用可连接的线程。
ESRCH 找不到与给定线程标识指定的线程相对应的线程。

在下列情况下, pthread_join 函数将失败:

描述
EDEADLK 线程的值指定调用线程。

pthread_join 函数不会返回错误代码 EINTR