原理
在线程结束时 pthread_exit(retval);,相当于 return retval;
主线程 这里通过了 void *args; pthread_join(th, args); 获取值( *args =retval)
主线程可以通过 args 来访问 子线程 的堆数据
代码
#include<stdio.h>
#include<pthread.h>
void *func(void *args)
{
int *b = new int(100);
pthread_exit(b);
// return b;
}
int main()
{
pthread_t th;
pthread_create(&th, NULL, &func, NULL);
int *d;
pthread_join(th, (void **)&d);
printf("%d\n", *d);
return 0;
}
注意
- return retval; retval 这个指针一定是指向 堆空间的,因为栈空间的数据再线程结束之后会立刻释放。
- pthread_join() 和pthread_detach();互斥, 如果在线程函数里面指定了 pthread_detach();那线程的堆数据会在线程结束之后立刻释放;这样我们就不能获取子线程的数据