[io进程]——线程分离函数pthread_detach

int pthread_detach(pthread_t thread)

1.pthread_detach 是一个用于将线程从父进程中分离出来的函数.

2.线程在终止时自动回收资源,不需要其他线程等待它的退出状态。

3.这个函数的调用不会导致线程立即终止,但一旦线程被设置为分离状态,它就不能再使用 pthread_join 来获取其终止状态。

参数:线程ID!!!!(pthread_self获取线程号)

返回值

  • 成功:返回0。
  • 失败:返回非零错误码或特定错误代码如ESRCH(找不到指定的任务)或EINVAL(参数无效)
#include<stdio.h>
#include<pthread.h>
#include<stdlib.h>
//子线程
void* handler(void*arg)
{
pthread_detach(pthread_self());
printf("in thread %lu\n",pthread_self());
pthread_exit(NULL);
printf("exit\n");
return NULL;
}
int main
{
pthread_t pid;
if(pthread_creat(&tid,NULL,hander,NULL)!=0)
{perror("");return-1;}
//主线程
printf("tid:%lu\n",pthread_self());
pthread_detach(tid);//等待线程退出,回收线程资源
if(pthread_join(tid,NULL)!=0)//0有返回
{printf("join err")}
return 0;
}

使用方式:

1)在主线程中调用pthread_detach(tid);

2)在子线程中调用pthread_detach(pthread_self());

 

注意事项

  1. 不可逆性:一旦线程被设置为分离状态,就不能再恢复到可连接状态,也不能通过 pthread_join 获取其终止状态。
  2. 资源回收:处于分离状态的线程在终止后会自动释放所有资源,避免了内存泄漏的问题。
  3. 多线程调用:对同一个线程多次调用 pthread_detach 是未定义行为,可能会导致不确定的结果。
  4. 子线程推出没有主线程回收资源,线程会变成僵尸线程。

pthread_detach 提供了一种高效且简便的方式来管理线程资源,特别是在高性能服务器等场景下,可以显著提高系统的效率和稳定性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值