linux之使用 pthread_detach 函数实现线程分离

5.pthread_detach函数
    作用:实现线程分离,好处:自动清理PCB
   原型: int pthread_detach(pthread_t thread); 成功:0;失败:错误号
    注意:一般情况下,线程终止后,其终止状态一直保留到其它线程调用 pthread_join 获取它的状态为止。但是线程也
    可以被置为 detach 状态,这样的线程一旦终止就立刻回收它占用的所有资源,而不保留终止状态。不能对一个已经
    处于 detach 状态的线程调用 pthread_join,这样的调用将返回 EINVAL 错误。也就是说,如果已经对一个线程调用了
    pthread_detach 就不能再调用 pthread_join 了。

代码:pthrd_detach.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>

void *tfn(void *arg)
{
	int n = 3;
	
	while(n--){
		printf("thread count %d\n", n);
	}
	
	//return (void*)1;
	pthread_exit((void*)1);
}

int main()
{
	pthread_t tid;
	void *tret;
	int err;
	
	//创建一个子线程
	pthread_create(&tid, NULL, tfn, NULL);
	pthread_detach(tid);	//让线程分离----自动退出,无系统残留资源
	
	while(1){
		//回收子线程(阻塞等待回收),pthread_join函数返回值:成功返回0,失败返回错误号
		err = pthread_join(tid, (void**)&tret);
		printf("----------err = %d\n", err);//----------err = 22
		if(err != 0)
			//因为创建线程之后,又让线程分离,所以pthread_join函数的参数tid不是pthread_create的传出参数tid,即无效的参数
			fprintf(stderr,"thread_join error: %s\n", strerror(err));//thread_join error: Invalid argument
		else
			fprintf(stderr,"thread exit code: %d\n", (int)tret);
		
		sleep(1);
	}
	return 0;
}

结果:

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值