是否需要分离pthread以防止内存泄漏?

时间:2013-06-05 09:24:10

标签: c++ memory-management pthreads

在我的程序中,我使用

处理新线程
 pthread_t thread;
 pthread_create(&thread, NULL,
            c->someFunction, (void *) fd); //where fd is ID of the thread

问题很简单 - 如果我只是让someFunction完成,是否需要在C++中调用例如join memory leaks或其他任何内容,预先{{1}}或自动释放内存?

1 个答案:

答案 0 :(得分:7)

来自opengroup page for pthread_join

  

pthread_join()函数提供了一个允许的简单机制   应用程序等待线程终止。线程之后   终止后,应用程序可以选择清理资源   被线程使用了。例如,在pthread_join()返回后,   可以回收任何应用程序提供的堆栈存储。

     

pthread_join()或pthread_detach()函数最终应该是   调用使用detachstate属性创建的每个线程   设置为PTHREAD_CREATE_JOINABLE,以便与存储关​​联   线程可以回收。

man page of pthread_join

  

无法加入可加入的线程(即不加入的线程)   独立的),亲          duces一个“僵尸线”。避免这样做,因为每个僵尸线程消耗一些          系统资源,当积累了足够的僵尸线程时,它将不再存在          可以创建新线程(或进程)。

     

没有pthreads模拟waitpid(-1,& status,0),也就是说,“加入任何ter-         minated thread“。

     

如果您认为自己需要此功能,则可能需要         重新考虑您的应用程序设计。

如果你pthread_detach

  

pthread_detach()函数应指示实现   该线程可以回收线程线程的存储空间   终止

如果您没有detachjoin一个joinable主题,则会导致资源浪费