4

在我的程序中,我处理新线程

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

问题很简单 - 如果我只是让someFunction完成,那么是否需要C++调用某些东西,例如join或其他任何东西,以防止memory leaks内存或内存自动释放?

4

1 回答 1

7

pthread_join 的 opengroup 页面

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

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

并来自pthread_join 的手册页

未能与可连接的线程(即未分离的线程)连接会产生“僵尸线程”。避免这样做,因为每个僵尸线程都会消耗一些系统资源,当累积了足够多的僵尸线程时,将无法再创建新线程(或进程)。

没有类似于 waitpid(-1, &status, 0) 的 pthreads,即“加入任何终止的线程”。

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

如果您执行pthread_detach

pthread_detach() 函数应向实现指示线程线程的存储可以在线程终止时回收

如果不detachjoin线程joinable,可能会造成资源浪费

于 2013-06-05T09:31:03.490 回答