inux下C中怎么让才干安全关闭线程

前言:
    多线程程序中,特别是频繁申请。释放线程的情况下,就要注意线程的关闭,最好使用线程池。


一,线程退出方式
    (1) 运行完毕后隐式退出;


    (2) 由线程本身显示调用pthread_exit 函数退出;
            pthread_exit (void * retval) ; 


    (3) 被其它线程用pthread_cance函数终止:
            pthread_cance (pthread_t thread) ; 


二。线程状态
    pthread 线程有两种状态,joinable(非分离)状态和detachable(分离)状态,默觉得joinable。


  joinable:当线程函数自己返回退出或pthread_exit时都不会释放线程所用资源,包含栈。线程描写叙述符等(有人说有8k多,未经验证)。


  detachable:线程结束时会自己主动释放资源。


Linux man page said:
When a joinable thread terminates, its memory resources (thread descriptor and stack) are not deallocated until another thread performs pthread_join on it. Therefore, pthread_join must be called  once  for each joinable thread created to avoid memory leaks.


因此,joinable 线程运行完后不使用pthread_join的话就会造成内存泄漏。




解决的方法:
1.// 创建线程前设置 PTHREAD_CREATE_DETACHED 属性
pthread_attr_t attr;
pthread_t thread;
pthread_attr_init (&attr);
pthread_attr_setdetachstat(&attr, PTHREAD_CREATE_DETACHED);
pthread_create (&thread, &attr, &thread_function, NULL);
pthread_attr_destroy (&attr);


2.当线程为joinable时,使用pthread_join来获取线程返回值,并释放资源。




3.当线程为joinable时,也可在线程中调用 pthread_detach(pthread_self());来分离自己。




三。參考文件
1,http://blog.csdn.net/bbs598598/article/details/7536853

转载于:https://www.cnblogs.com/xfgnongmin/p/10611109.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值