为什么线程退出还要回收线程

为什么线程退出后还需要线程回收

线程的退出函数:pthread_exit

    int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void * (*start_routine) (void *), void *arg);
    功能:创建一个分支线程
    参数1:线程号,通过参数返回,用法:在外部定义一个该类型的变量,将地址传递入函数,调用结束后,该变量中即是线程号
    参数2:线程属性,一般填NULL,让系统使用默认属性创建一个线程
    参数3:是一个回调函数,一个函数指针,需要向该参数中传递一个函数名,作为线程体执行函数
        该函数由用户自己定义,参数是void*类型,返回值也是void *类型
    参数4: 是参数3的参数,如果不想向线程体内传递数据,填NULL即可
    返回值:成功返回0,失败返回一个错误码(非linux内核的错误码,是线程支持库中定义的一个错误码)

线程的资源回收:pthread_join

    int pthread_join(pthread_t thread, void **retval);
    功能:阻塞回收指定线程的资源
    参数1:要回收的线程线程号
    参数2:线程退出时的状态,一般填NULL
    返回值:成功返回0,失败返回一个错误码

原因:

  • 当一个线程执行结束后,它并不会自动释放占用的资源
  • 使用pthread_create()创建线程时,设置属性为NULL,线程退出时该线程占用的资源不会释放。比如遇到过反复创建某个线程后返回,会导致其占用的虚拟内存不断增加,最终导致系统资源不可用。
posted @ 2024-09-17 14:47  _Elysia  阅读(5)  评论(0编辑  收藏  举报