【问题标题】:Detached pthread_create() leaks memory分离的 pthread_create() 泄漏内存
【发布时间】:2011-09-18 17:17:00
【问题描述】:

我正在 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(),但是当我注意到泄漏时,我开始google'd并搜索了StackOverflow,并找到了以下URL:

这就是我初始化属性并“分离”启动线程的原因。我也破坏了属性。 我不能使用 pthread_join(),因为我不想要阻塞调用,我希望我的线程独立存在。

不幸的是,泄漏仍然存在。我没有更多的想法,将得到任何进一步的建议!

谢谢!


@arrowdodger:在不设置任何属性的情况下调用 pthread_detach() 也会泄漏。 我也尝试使用 setdetach 和 pthread_detach() 没有成功。

@drhirsch :我知道它会泄漏,因为当我让它运行 1 天时,我得到一个“内存不足”的内核恐慌。此外,使用 top 我可以看到越来越多的内存专用于我的过程(但我知道最好的方法是使用 valgrind)。

【问题讨论】:

  • 你怎么知道这段代码泄露了内存?

标签: memory memory-leaks pthreads


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-05-19
    • 2011-11-08
    • 2014-09-27
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 2013-05-29
    • 1970-01-01
    相关资源
    最近更新 更多