我需要创建的每个线程都必须使用pthread_join吗?

7

pthread_join() 手册页面:

当可连接线程终止时,它的内存资源(线程描述符和 stack)不会被释放,直到线程执行 pthread_join。因此,必须为每个可连接线程调用一次 pthread_join 以避免内存泄漏。

这意味着我需要加入每个创建的线程以防止泄漏吗?但加入会阻塞调用者。

请进一步解释。

1个回答

8

您不必加入线程,但这是一个好主意。如果不调用pthread_join(),则有可能在线程终止之前main()函数就会返回。在这种情况下,pthread_join()使应用程序等待直到另一个线程完成处理。此外,当您加入线程时,它为您提供了检查返回值并确保一切顺利的机会,并且它为您提供了清理任何可能与线程共享的资源的机会。

编辑:一个可能对您有用的函数是pthread_detach()。pthread_detach()允许在线程终止后清理线程的存储空间,因此之后无需加入线程。


2
你也可以使用pthread_attr_setdetachstate函数并设置PTHREAD_CREATE_DETACHED属性来创建分离线程。 - Hasturkun
我以为有这样一个参数,但我想不起它叫什么了。谢谢你帮我恢复记忆! - Joe M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接