我在Linux环境中用C开发应用程序。我注意到以下代码仅在数百次执行后泄漏了大量内存:
do {
pthread_t flushThread;
pthread_attr_t attr;
logevent_thread_t logThread = { Db , &do_curl };
if (( pthread_attr_init ( &attr ) == 0 ) &&
( pthread_attr_setdetachstate ( &attr , PTHREAD_CREATE_DETACHED ) == 0 ) ) {
pthread_create ( &flushThread , &attr , (void*)FlushThread , (void*)&logThread );
pthread_attr_destroy ( &attr );
}
} while(1);
当我开始使用代码时,我只使用了pthread_create(),但是当我注意到泄漏时,我开始谷歌搜索StackOverflow,并找到以下网址:
这就是为什么我初始化属性并启动线程"分离"。我也破坏了属性。 我不能使用pthread_join()因为我不想要阻止呼叫,我希望我的线程能够独立生存。
不幸的是,泄漏仍然存在。我没有更多的想法,并会得到任何进一步的建议!
谢谢!
@arrowdodger:调用pthread_detach()而不设置任何类型的属性也会泄漏。 我也尝试使用setdetach和pthread_detach()但没有成功。
@drhirsch:我知道它泄漏了,因为当我运行了1天后,我得到了一个" Out Of Memory"内核恐慌。另外,使用top我可以看到越来越多的记忆专门用于我的过程(但我知道最好的方法是使用valgrind)。
答案 0 :(得分:0)
我从您的链接中读到的是您应该调用pthread_detach(),而不是使用DETACHED属性创建它。