linux线程退出的方式及线程资源清理

关键词:线程资源释放, pthread_join()

1, 每个线程有自己的一组寄存器,自己的栈空间, 自己的errno变量;

2,pthread_create线程创建并不能保证哪个线程先运行,新线程还是调用线程。

3,线程正常退出的方式有三种: 线程函数直接return, 被同一进程中的其他线程调用pthread_cancel取消,线程调用pthread_exit 退出,(线程运行异常退出)。

4,不论是可预见的线程终止还是异常终止,都会存在资源释放的问题,在不考虑因运行出错而退出的前提下,如何保证线程终止时能顺利的释放掉自己所占用的资源,特别是锁资源,就是一个必须考虑解决的问题,https://www.ibm.com/developerworks/cn/linux/thread/posix_threadapi/part4/ 一文中介绍了pthread_cleanup_push()/pthread_cleanup_pop()解决资源释放问题,因为没有用到,不写在这里,对于异常退出的情况,注意在每个退出的点上都加上资源,尤其是锁资源的释放。

5,对于线程正常退出的资源释放,根据线程的属性,有两种方式: 对于属性为joinable的(默认),线程所占用的内存仅当有线程对其执行了pthread_join()后才会释放对于属性为detached分离状态的,线程在结束运行时自行释放所占用的内存资源。

6,把线程置为detached属性有两种方式,一种是在线程创建时设置属性pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);另一种是调用pthread_detach()使线程成为detached,就可以自动释放资源了。

7,对于属性为joinable的线程,可以通过调用pthread_detach()将其属性改变为detached, 但是属性为detached的线程,不能改回joinable属性, 也就是不能调用pthread_join()释放资源。

8,如果线程pthread_detach()执行之后,对线程请求pthread_join()将返回错误,如果线程已经被调用pthread_join()后,再调用pthread_detach()就不会有任何效果。

9,一个可join的线程所占用的内存仅当有线程对其执行了pthread_join()后才会释放,因此为了避免内存泄漏,所有线程的终止,要么已设为DETACHED,要么就需要使用pthread_join()来回收

10,pthread_join()函数:以阻塞的方式等待thread指定的线程结束。当函数返回时,被等待线程的资源被收回。如果线程已经结束,那么该函数会立即返回。并且thread指定的线程必须是joinable的。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值