分类: LINUX
2010-07-29 13:16:12
Linux man page 里有已经说明了这个问题:
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.
也就说线程执行完后如果不join的话,线程的资源会一直得不到释放而导致内存泄漏!一时的图快后患无穷啊。
解决办法:
第2行的那种方法最简单,在线程函数尾部加上这句话就可以将线程所占用的资源给释放掉;或者像 5-11 所示的方法设置detach属性,这样也会在线程return/pthread_exit后释放内存。
其实仔细想想,valgrind检查时已经提示了pthread_create没有释放的问题,只是之前没引起注意。其实这样的问题也只有在长时间 运行时,慢慢积累这一点点的内存才会暴露出来,看来valgrind的提示也不能置之不理啊。