Chinaunix首页 | 论坛 | 博客
  • 博客访问: 47508
  • 博文数量: 20
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 145
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-16 15:07
文章分类

全部博文(20)

文章存档

2010年(15)

2008年(5)

我的朋友

分类: C/C++

2008-11-10 10:15:59

  除非是一个分离的线程,否则在线程退出时,它是不会释放它的资源的。

pthread_detach函数将线程分离,它设置线程的内部选项来说明线程退出后,线程的存储空间

可以被重新收回。分离线程退出时不会报告它们的状态。没有分离的线程是可接合的,而且被另

一个线程为它们调用pthread_join或者整个进程退出之前,这些线程不会释放它们所有的资

源。

  pthread_join函数会使调用者等待待定的线程退出。为防止内存泄漏,长时间运行的程序

最终应该为每个线程调用pthread_detach或pthread_join。

  代码:

#include <stdio.h>
#include <pthread.h>

pthread_t tid[2];

void * func_1(void *arg)
{
        //为函数func_2创建线程

        pthread_create(&tid[1],NULL,func_2,NULL);
        //tid[0]将自己挂起,等待线程tid[1]的结束

        pthread_join(tid[1],NULL);
}
void * func_2(void *arg)
{
        //函数内容

}

int main()
{
        //为函数func_1创建线程并将其分离

        pthread_create(&tid[0],NULL,func_1,NULL);        
        pthread_detach(tid[0],NULL);
        
        //主进程不退出,但这两个线程的资源都可以释放掉

        while(1)
        {
                sleep(10);
        }
        return 0;
}

 

   使用线程最麻烦的地方就是资源释放不掉,所以大家在创建线程之后,一定要将其分离或

者挂起,否则会内存泄漏,甚至out of memory

 

阅读(1810) | 评论(0) | 转发(0) |
0

上一篇:套接字基础

下一篇:Socket (UDP)

给主人留下些什么吧!~~