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

一,线程退出方式
    (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

inux下C中怎么让才干安全关闭线程的更多相关文章

  1. inux下进程的最大线程数、进程最大数、进程打开的文件数

    inux下进程的最大线程数.进程最大数.进程打开的文件数 2008-12-07 23:48 =========================    如下转载自这里. linux 系统中单个进程的最大 ...

  2. dos2unix,去掉Linux下文件中的^M

    Windows系统下使用VS2010编写好的CPP文件,想放到Linux上进行编译.发现Linux上文件中的每行代码末尾都跟着^M这个符号. 为什么同一份文件在windows上和Linux上显示的不一 ...

  3. JS 获取select(多选下拉)中所选值的示例代码

    通过js获取select(多选下拉)中所选值,具体实现如下,有需要的朋友可以参考下,希望对大家有所帮助 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML ...

  4. 解决Ubuntu下sublime中不能输入中文的问题

    解决Ubuntu下sublime中不能输入中文的问题 Ubuntu下安装sublime后,不能输入中文,而在其他软件中能正常输入,这是sublime的bug,解决方案是在通过shell在每次运行sub ...

  5. Android下EditText中的字体不统一问题

    Android下EditText中的字体不统一问题 好久没写,今天心情好略记下解决的某bug 在一个登录界面有帐号和密码两个EditText,但是却发现两个EditText的hint的英文字体不同,看 ...

  6. DEBUG模式下, 内存中的变量地址分析

    测试函数的模板实现 /// @file my_template.h /// @brief 测试数据类型用的模板实现 #ifndef MY_TEMPLATE_H_2016_0123_1226 #defi ...

  7. IE8下div中2个button仅仅显示一个

    IE8下div中2个button仅仅显示一个,代码例如以下: <div id="adviceType" style="display: none;" &g ...

  8. 记录下项目中常用到的JavaScript/JQuery代码二(大量实例)

    记录下项目中常用到的JavaScript/JQuery代码一(大量实例) 1.input输入框监听变化 <input type="text" style="widt ...

  9. 记录下项目中常用到的JavaScript/JQuery代码一(大量实例)

    一直没有系统学习Javascript和Jquery,每次都是用到的时候去搜索引擎查,感觉效率挺低的.这边把我项目中用的的记录下,想到哪写哪,有时间再仔细整理. 当然,由于我主要是写后端java开发,而 ...

随机推荐

  1. 深入理解java虚拟机---java虚拟机内存管理(五)

    1.深入理解java虚拟机 总图: 1.线程共享区: 2.线程独占区: 1.程序计数器 理解为当前线程锁执行的字节码的行号指示器,程序计数器没有内存异常错误.

  2. loadrunner json中文无法识别问题

    http://blog.sina.com.cn/s/blog_6ff7a3b50101awmy.html

  3. cookie的参数

    def set_cookie(self, key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, ...

  4. SQL--数据库--基本操作

    SQL基本操作 基本操作:CRUD 将SQL的基本操作根据操作对象进行分类:库操作,表操作(字段),数据操作 库操作 对数据库的增删改查 新增数据库 基本语法Create database 数据库名字 ...

  5. transform子元素,绝对定位失效

    公司项目需要上拉刷新功能, mui下拉刷新组件采用固定布局,无法触发浏览器自带的隐藏地址栏功能. 思路: touchmove事件监听程序中,判断滚动位置:上下顶点使用transform 移动最外层容器 ...

  6. 20165326 java第八周学习笔记

    第八周学习笔记 知识点总结 1.进程与线程 进程:程序的一次动态执行过程 区别:进程和线程的区别? 进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元 同一个进程中可以包括多个线程,并 ...

  7. MySQL:数据类型介绍

    数据类型介绍 一.整数类型(可以添加自增约束条件) 数据类型 存储需要 有符号 无符号 tinyint 1个字节 -2^7~2^7-1 0~2^8 smallint 2个字节 -2^15~2^15-1 ...

  8. UIIimageView读取图片的两种方式及动画的执行

    /**count:图片数量 name:图片名称*/ - (void)runAnimationWithCount:(int)count name:(NSString *)name { if(self.t ...

  9. 微软Power BI 每月功能更新系列——4月Power BI 新功能学习

    本月Power BI Desktop的更新,除了常规的视觉和数据连接器改进之外,还有两个非常大的功能改进,交互式的报表.问答,用户直接在Desktop可以询问有关的数据问题,面对层出不穷的用户需求,这 ...

  10. Golang游戏服务器与skynet的个人直观比较

    我对和GOLANG写MMO服务器的一些遐想: 1.沙盒(隔离性) SKYNET:原生LUA STATE作为沙盒, 进行服务器间隔离安全性高: 服务可以很容易的配置到不同节点之上. GO:估计用RECO ...