新创建的线程和进程一样,也需要被连接以监听其退出状态,否则也会变成僵尸线程。背后原因与进程一样,其退出之后,内核会为它保留退出状态数据,直到有人取走为止。连接线程的库函数如下所示:
int pthread_join(pthread_t thread, void **retval);
进程连接与线程连接在以下几个方面存在一些区别:
任何线程都可以监听一个指定线程的退出,而不需要是创建该线程的线程;
线程连接函数只能连接一个指定ID的线程,而不能像进程一样监听任意线程的退出;
线程创建之后可以使用分离函数设置其不需要等待被连接,这种情况下,线程结束之后会被自动清理。
设置线程分离的函数为:
int pthread_detach(pthread_t thread);
处于分离状态的线程,无法被任何线程执行连接获取其状态,也无法再返回到可连接状态。
pthread_join使一个线程等待另一个线程结束。
代码中如果没有pthread_join主线程会很快结束从而使整个进程结束,从而使创建的线程没有机会开始执行就结束了。加入pthread_join后,主线程会一直等待直到等待的线程结束自己才结束,使创建的线程有机会执行。