从 pthread_join()
手册页面:
当可连接线程终止时,它的内存资源(线程描述符和 stack
)不会被释放,直到线程执行 pthread_join
。因此,必须为每个可连接线程调用一次 pthread_join
以避免内存泄漏。
这意味着我需要加入每个创建的线程以防止泄漏吗?但加入会阻塞调用者。
请进一步解释。
从 pthread_join()
手册页面:
当可连接线程终止时,它的内存资源(线程描述符和 stack
)不会被释放,直到线程执行 pthread_join
。因此,必须为每个可连接线程调用一次 pthread_join
以避免内存泄漏。
这意味着我需要加入每个创建的线程以防止泄漏吗?但加入会阻塞调用者。
请进一步解释。
您不必加入线程,但这是一个好主意。如果不调用pthread_join(),则有可能在线程终止之前main()函数就会返回。在这种情况下,pthread_join()使应用程序等待直到另一个线程完成处理。此外,当您加入线程时,它为您提供了检查返回值并确保一切顺利的机会,并且它为您提供了清理任何可能与线程共享的资源的机会。
编辑:一个可能对您有用的函数是pthread_detach()。pthread_detach()允许在线程终止后清理线程的存储空间,因此之后无需加入线程。