pthread的状态

一.pthread的2中状态:

  1. joinable状态:当线程函数自己返回退出时或pthread_exit时都不会释放线程所占用堆栈和线程描述符,此时可以获得线程的执行结果,需要调用pthread_join方法释放资源。
  2. unjoinable状态:当线程函数自己返回退出时或pthread_exit时都会自动释放线程所占用堆栈和线程描述符,此时不能够获得线程的执行结果。

二.pthread的设置方法:

  • joinable状态:默认状态
pthread_t tid;
nt status = pthread_create(&tid, NULL, myThreadFun, NULL);
  • unjoinable状态:

设置unjoinable状态有2中方法:

调用detach方法修改为unjoinable状态

static void myThreadFun(void ptr)
{
    pthread_detach(pthread_self());

    .......

}


pthread_t tid;
nt status = pthread_create(&tid, NULL, myThreadFun, NULL);

在线程创建时设置:

pthread_t tid;
pthread_attr_t attr;
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
nt status = pthread_create(&tid, NULL, myThreadFun, NULL);

 pthread_attr_destroy(attr);线程执行完后必须调用此方法释放参数资源,否则会照成内存泄露

三.unjoinable线程调用pthread_join

调用pthread_join方法释放资源时会阻塞主线程自动子线程的资源回收完毕,因此若在unjoinable状态的线程结束时再调用pthread_join,由于此时资源时自动释放的,因此在调用pthread_join方法会大概率的将主线程卡死。(线程什么活都不做直接结束的情况下)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值