子线程退出后,主控线程也是需要回收子线程资源的。
函数:pthread_ join
阻塞等待线程退出,获取线程退出状态函数说明:
int pthread_join(pthread_t thread, void **retval);
参数 1:被回收子线程的 ID。
参数 2:接收子线程退出值,参数 2 解引用 和 pthread_exit 参数一样。
返回值:成功返回 0,失败返回错误号(失败原因可能是线程 ID 错误,或者该线程不可回收)。
举例:
#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
int xx = 107; // 设置退出值,注意,使用全局或者堆
void * func (void *arg) {
printf("I am a thread,tid=%lu\n", pthread_self() ); //获得子线程ID
sleep(3); // 验证阻塞:如果先睡3s,再打印错误信息,说明阻塞;反之,非阻塞
pthread_exit((void*)xx);
}
int main()
{
pthread_t tid;
pthread_create(&tid, NULL, func, NULL);
void *retval = NULL; // 传出参数,用于存放退出值
pthread_join(tid, &retval); // 阻塞等待子线程退出,获得子进程退出值
printf("pthread exit with %d\n", (int)retval); // 打印退出值
return 0;
}