分离的pthread_create()泄漏内存

时间:2011-06-20 13:41:46

标签: memory memory-leaks pthreads

我在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)。

1 个答案:

答案 0 :(得分:0)

我从您的链接中读到的是您应该调用pthread_detach(),而不是使用DETACHED属性创建它。