在我的程序中,我使用
处理新线程 pthread_t thread;
pthread_create(&thread, NULL,
c->someFunction, (void *) fd); //where fd is ID of the thread
问题很简单 - 如果我只是让someFunction
完成,是否需要在C++
中调用例如join
memory leaks
或其他任何内容,预先{{1}}或自动释放内存?
答案 0 :(得分:7)
来自opengroup page for pthread_join,
pthread_join()函数提供了一个允许的简单机制 应用程序等待线程终止。线程之后 终止后,应用程序可以选择清理资源 被线程使用了。例如,在pthread_join()返回后, 可以回收任何应用程序提供的堆栈存储。
pthread_join()或pthread_detach()函数最终应该是 调用使用detachstate属性创建的每个线程 设置为PTHREAD_CREATE_JOINABLE,以便与存储关联 线程可以回收。
无法加入可加入的线程(即不加入的线程) 独立的),亲 duces一个“僵尸线”。避免这样做,因为每个僵尸线程消耗一些 系统资源,当积累了足够的僵尸线程时,它将不再存在 可以创建新线程(或进程)。
没有pthreads模拟waitpid(-1,& status,0),也就是说,“加入任何ter- minated thread“。
如果您认为自己需要此功能,则可能需要 重新考虑您的应用程序设计。
如果你pthread_detach,
pthread_detach()函数应指示实现 该线程可以回收线程线程的存储空间 终止
如果您没有detach
或join
一个joinable
主题,则会导致资源浪费