Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6035643
  • 博文数量: 579
  • 博客积分: 1548
  • 博客等级: 上尉
  • 技术积分: 16632
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-12 15:29
个人简介

http://www.csdn.net/ http://www.arm.com/zh/ https://www.kernel.org/ http://www.linuxpk.com/ http://www.51develop.net/ http://linux.chinaitlab.com/ http://www.embeddedlinux.org.cn http://bbs.pediy.com/

文章分类

全部博文(579)

文章存档

2018年(18)

2015年(91)

2014年(159)

2013年(231)

2012年(80)

分类: LINUX

2014-05-08 16:37:38

操作系统:ubuntu10.04

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

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




阅读(12370) | 评论(0) | 转发(5) |
给主人留下些什么吧!~~