在我的程序中,我处理新线程
pthread_t thread;
pthread_create(&thread, NULL,
c->someFunction, (void *) fd); //where fd is ID of the thread
问题很简单 - 如果我只是让someFunction
完成,那么是否需要C++
调用某些东西,例如join
或其他任何东西,以防止memory leaks
内存或内存自动释放?
在我的程序中,我处理新线程
pthread_t thread;
pthread_create(&thread, NULL,
c->someFunction, (void *) fd); //where fd is ID of the thread
问题很简单 - 如果我只是让someFunction
完成,那么是否需要C++
调用某些东西,例如join
或其他任何东西,以防止memory leaks
内存或内存自动释放?
pthread_join() 函数提供了一种简单的机制,允许应用程序等待线程终止。在线程终止后,应用程序可能会选择清理线程使用的资源。例如,在 pthread_join() 返回后,可以回收任何应用程序提供的堆栈存储。
pthread_join() 或 pthread_detach() 函数最终应为使用 detachstate 属性设置为 PTHREAD_CREATE_JOINABLE 创建的每个线程调用,以便可以回收与线程关联的存储。
未能与可连接的线程(即未分离的线程)连接会产生“僵尸线程”。避免这样做,因为每个僵尸线程都会消耗一些系统资源,当累积了足够多的僵尸线程时,将无法再创建新线程(或进程)。
没有类似于 waitpid(-1, &status, 0) 的 pthreads,即“加入任何终止的线程”。
如果您认为您需要此功能,您可能需要重新考虑您的应用程序设计。
如果您执行pthread_detach,
pthread_detach() 函数应向实现指示线程线程的存储可以在线程终止时回收
如果不detach
加join
线程joinable
,可能会造成资源浪费