6.6.2 结合线程
pthread_join( )用于结合或再次结合进程中的控制流。pthread_join( )导致调用线程将它的执行挂起,直到目标进程终止。它类似于进程所使用的wait( )函数。这个函数由线程的创建者调用,该调用线程等待新的线程终止并返回,然后再次结合到调用线程的控制流中。如果线程句柄是全局的,则pthread_join( )也可以被对等线程调用。这样使得任何线程可以将控制流同进程中任何其他线程结合。如果调用线程在目标线程返回之前被取消,这会导致目标线程成为僵死线程。本章稍后将会讨论分离的线程。如果不同的对等线程同时对同一个线程调用pthread_join( )函数,产生的行为未被定义。
调用形式
- #include <pthread.h>
- int pthread_join(pthread_t thread, void **value_ptr);
参数thread是调用线程正在等待的目标线程。如果目标线程成功返回,则它的退出状态保存在value_ptr中。如果目标线程不是一个可结合的线程,换句话说,如果它是作为分离的线程创建的,则函数失败。如果指定的thread线程不存在,则函数也会失败。
应当为所有可结合的线程调用pthread_join( )函数。一旦线程被结合,则操作系统可以收回线程所使用的存储空间。如果可结合的线程没有同任何线程结合,或者如果调用join函数的线程被取消,则目标线程继续利用存储空间。这是一种类似于父进程尚未接受子进程的退出状态而产生的僵死进程的状态。子进程继续在进程表中占据一个表项。