pthread_exit 子例程
用途
终止调用线程。
库
线程库 (libpthreads.a)
语法
#include <pthread.h>
void pthread_exit (status)
void *status;描述
pthread_exit 子例程安全地终止调用线程,并存储可能加入调用线程的任何线程的终止状态。 终止状态始终是空指针; 它可以引用任何类型的数据。 建议不要将此指针强制转换为标量数据类型 (例如int ) ,因为强制转换可能不可移植。 此子例程从不返回。
与 exit 子例程不同, pthread_exit 子例程不会关闭文件。 因此,在调用此子例程之前,必须关闭仅由调用线程打开和使用的任何文件。 还需要注意的是, pthread_exit 子例程释放任何特定于线程的数据,包括线程的堆栈。 在堆栈上分配的任何数据都将变为无效,因为堆栈已释放,并且相应的内存可由另一个线程复用。 所以,在线程调用 pthread_exit 子例程之前,必须清除分配到线程的堆栈上的线程同步对象(互斥对象和条件变量)。
从线程的初始例程返回隐式调用 pthread_exit 子例程,使用返回值作为参数。
如果未拆离线程,那么其资源 (包括线程标识,终止状态,特定于线程的数据及其存储器) 都将被维护,直到拆离线程或进程终止为止。
如果另一个线程加入了调用线程,那么该线程会立即唤醒,并且会自动拆离调用线程。
如果已拆离线程,那么清除例程将从其堆栈中弹出并执行。 然后执行特定于线程的数据中的析构函数例程。 最后,将回收线程的存储器,并释放其标识以供复用。
通过调用此子例程来终止初始线程不会终止进程,它只是终止初始线程。 但是,如果进程中的所有线程都已终止,那么通过隐式调用带有返回码 0 的 exit 子例程 (如果已拆离最后一个线程) 或 1 (否则) 来终止进程。
参数
| 项 | 描述 |
|---|---|
| 状态 | 指向通过连接线程使用的可选终止状态。 如果不需要终止状态,那么其值应该为 NULL。 |
返回值
pthread_exit 函数无法返回到其调用者。
错误
未定义任何错误。
pthread_exit 函数不会返回错误代码 EINTR。