当前位置: 技术问答>linux和unix
linux动态创建线程,在该线程结束前不会再次创建,每次线程运行结束后,似乎内存都不会主动释放,再次创建内存会不断增加
来源: 互联网 发布时间:2017-04-06
本文导语: PC端每发送一次查询指令时linux动态创建线程,在该线程结束前,查询指令再次到来会忽略该指令,线程不会再次创建。但是每次线程运行结束后,似乎内存都不会主动释放,再次创建内存会不断增加。 动态线程中运...
PC端每发送一次查询指令时linux动态创建线程,在该线程结束前,查询指令再次到来会忽略该指令,线程不会再次创建。但是每次线程运行结束后,似乎内存都不会主动释放,再次创建内存会不断增加。
动态线程中运行的函数就是定义的数据变量(不是new出来的,所以它应该会自己释放)然后调用linux的网络函数发送,发送完线程就退出,基本就是很简单的一线程,不会有内存泄露。嵌入式linux中通过TOP指令查看系统虚拟内存占比在PC端不断查询下占比以13%左右不断的上升,直到系统看门狗让linux重启,谁能给点什么建议?
动态线程中运行的函数就是定义的数据变量(不是new出来的,所以它应该会自己释放)然后调用linux的网络函数发送,发送完线程就退出,基本就是很简单的一线程,不会有内存泄露。嵌入式linux中通过TOP指令查看系统虚拟内存占比在PC端不断查询下占比以13%左右不断的上升,直到系统看门狗让linux重启,谁能给点什么建议?
|
先用工具扫一下是否有内存泄露:比如valgrind.
"动态线程中运行的函数就是定义的数据变量(不是new出来的,所以它应该会自己释放)", 什么定义的数据变量,会自己释放?
另外你这种模式需要动态创建线程吗?是否可以一个线程不停的等任务就可以。。。
"动态线程中运行的函数就是定义的数据变量(不是new出来的,所以它应该会自己释放)", 什么定义的数据变量,会自己释放?
另外你这种模式需要动态创建线程吗?是否可以一个线程不停的等任务就可以。。。
|
以下是否是楼主的问题?供参考:
创建一个线程默认的状态是joinable, 如果一个线程结束运行但没有被join,则它的状态类似于进程中的Zombie Process,即还有一部分资源没有被回收(退出状态码),所以创建线程者应该调用pthread_join来等待线程运行结束,并可得到线程的退出代码,回收其资源(类似于wait,waitpid)
可以在子线程中加入代码
pthread_detach(pthread_self())
或者父线程调用
pthread_detach(thread_id)(非阻塞,可立即返回)
这将该子线程的状态设置为detached,则该线程运行结束后会自动释放所有资源。
创建一个线程默认的状态是joinable, 如果一个线程结束运行但没有被join,则它的状态类似于进程中的Zombie Process,即还有一部分资源没有被回收(退出状态码),所以创建线程者应该调用pthread_join来等待线程运行结束,并可得到线程的退出代码,回收其资源(类似于wait,waitpid)
可以在子线程中加入代码
pthread_detach(pthread_self())
或者父线程调用
pthread_detach(thread_id)(非阻塞,可立即返回)
这将该子线程的状态设置为detached,则该线程运行结束后会自动释放所有资源。
|
顶,这个我赞同
|
如果楼主确认new之后都delete了,那么用pthread_join回收线程资源试试
|
线程退出貌似系统不会帮你释放资源,进程退出时应该会释放资源的
|
线程中调用linux的网络函数发送是不是没有清理,还是线程资源没有清理?
|
你这个问题、应该是线程没有真正是释放资源或者可能都没退出。
你在创建线程的时候设置一下状态、以分离状态创建线程、那么你创建的每个线程在做完自己的事情之后就会自动退出 释放自己的资源
你在创建线程的时候设置一下状态、以分离状态创建线程、那么你创建的每个线程在做完自己的事情之后就会自动退出 释放自己的资源
|
线程的资源确实应该回收的,用工具valgrind可以查出,所以要用pthread_join等待一个线程结束