【问题标题】:Do I have to pthread_join each thread I create?我必须 pthread_join 我创建的每个线程吗?
【发布时间】:2009-06-30 16:19:21
【问题描述】:

来自pthread_join() 手册页:

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

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

请解释一下。

【问题讨论】:

    标签: linux multithreading


    【解决方案1】:

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

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

    【讨论】:

    • 您也可以使用 pthread_attr_setdetachstate 创建具有 PTHREAD_CREATE_DETACHED 属性的线程
    • 我还以为有这么一个参数,但是我不记得叫什么了。感谢您刷新我的记忆!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 2021-05-08
    相关资源
    最近更新 更多