您的位置:首页 > 运维架构 > Linux

linux c语言 线程资源释放

2016-01-30 21:52 447 查看
最近做了多线程并发网络编程的时候出现了一个问题。程序在运行的过程中,占用的内存会越来越大。起初我怀疑是程序有指针没有被free,导致内存泄漏。在查代码的过程中我发现,我并没有手动收回创建的线程资源。通过上网查阅linux线程资源回收的资料,
我发现linux线程默认结束之后,
线程的资源不会得到释放。

Linux系统中程序的线程资源是有限的,表现为对于一个程序其能同时运行的线程数是有限的。而默认的条件下,一个线程结束后,其对应的资源不会被释放,于是,如果在一个程序中,反复建立线程,而线程又默认的退出,则最终线程资源耗尽,进程将不再能建立新的线程。

释放线程的资源有两种方法。一种是系统在线程结束之后自动释放资源。这种方法,我们需要设置线程的一个属性。

pthread_t pThread; //创建线程

pthread_attr_t pProprety; //线程属性

pthread_attr_init(&pProprety); //初始化线程属性

pthread_attr_setdetachstate(&pProprety,PTHREAD_CREATE_DETACHED); //设置线程属性

pthread_create(&pThread, &pProprety,(void *)init_convert,client_sock);//创建线程时将线程属性传进去

另一种是用别的线程或者进程释放此线程的资源。线程或者进程中调用pthread_join()。

pthread_t t;

pthread_create( NULL, NULL, GetSub, (void*)lp);

pthread_join( t);

值得注意的是,pthread_join(t)是阻塞的函数。如果t线程不消亡,这个线程就会一直在这里等待,直到t线程消亡。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: