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线程消亡。
我发现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线程消亡。
相关文章推荐
- 基于tiny4412的Linux内核移植 -- PWM子系统学习(八)
- Linux学习之源码2:start_kernel流程
- 解决Linux不能上网ping:unknown host的问题
- 内核初始化-从start_kernel到init
- linux部署及linux命令
- Linux下使用gem安装软件时遇到的一些坑
- 制作U盘多系统(老毛桃WinPE,Ubuntu,MaxDOS,CDlinux,Parted Magic Linux)引导工具
- 嵌入式Linux之旅——环境搭建篇之搭建基本开发环境
- Ubuntu Linux根分区扩容方法
- Linux下安装MATLAB的一些注意事项
- 阿里云服务器上开启linux远程桌面连接
- linux 信号 信号的递送
- 搭建LAMP环境
- Linux 服务器中文乱码编码解决
- Linux内核启动及根文件系统载入过程
- Linux使用最佳实践
- Linux以及Android开发中的小技巧和长繁命令记录收集
- linux中查找和过滤的用法:find,grep
- linux基础命令练习题
- linux定时器演示