线程退出的方式有很多,以下几种情况都会导致线程的退出。
- 线程的执行函数执行
return
语句并返回指定值。 - 线程调用
pthread_exit()
函数。 - 调用
pthread_cancel()
函数取消线程。 - 任意线程调用
exit()
函数,或者main()
函数中执行了return
语句,都会造成进程中的所有线程立即终止。
pthread_exit()
函数将终止调用线程,且参数可被其他线程调用 pthread_join()
函数来获取。参数 retval
指定了线程的返回值。如果一个线程调用了 pthread_exit()
函数,其他线程仍然继续执行。
#include <pthread.h> void pthread_exit(void *retval);点击复制复制失败已复制
pthread_join()
函数用于等待指定 thread
标识的线程终止。如果线程终止,则 pthread_join()
函数会立即返回。参数 retval
如果为非空指针,那么此时参数将会保存标识符为参数 thread
的线程退出时的返回值,即 pthread_exit()
函数中指定的参数。
#include <pthread.h> int pthread_join(pthread_t thread, void **retval);点击复制复制失败已复制
若线程并未进行分离,则必须使用 pthread_join()
函数来进行资源回收。如果未能进行,那么线程终止时将产生与僵尸进程类似的僵尸线程。如果僵尸线程积累过多,不仅浪费资源,而且可能无法继续创建新的线程。