Linux之线程(三)
线程等待
这个有点类似子进程的僵尸问题,无法对其进行回收,要是不等待的话
创建线程是完成任务,主线程要获取新线程的执行结果
pthread_join
参数拆解
pthread_t thread需要等待、回收资源的目标线程句柄(pthread_create输出的 tid)。 限制:
- 不能等待已被 join 过的线程;
- 不能等待自身(自 join 直接报错);
- 不能等待分离态线程(
pthread_detach后 join 失败)。void **retval二级指针, 用来接收线程退出时携带的返回值,分三种场景:
- 线程
return ptr/pthread_exit(ptr):*retval= 你传入的指针;- 线程被
pthread_cancel取消:*retval = PTHREAD_CANCELED(宏常量);- 不需要接收返回值:直接传
nullptr。返回值
0:等待 + 回收成功;- 非 0:失败(线程不存在、重复 join、分离线程、自等待等)。
