为什么线程退出后还需要线程回收
线程的退出函数: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,线程退出时该线程占用的资源不会释放。比如遇到过反复创建某个线程后返回,会导致其占用的虚拟内存不断增加,最终导致系统资源不可用。