pthread_join

pthread_join()函数原型:

int pthread_join(pthread_t thread, void **retval);

pthread_t thread:被连接线程的线程号
void **retval:指向一个被连接线程的返回码的指针的指针
return:线程连接的状态,0是成功,非0是失败

当调用pthread_join()时,当前线程会处于阻塞状态,直到被调用的线程结束后,当前线程才会重新开始执行。当pthread_join函数返回后,被调用线程才算真正意义上的结束,它的内存空间才会被释放。

注意事项:
1.被释放的内存空间仅仅是系统空间,你必须手动清理程序分配的空间,比如malloc()/ new() 分配的空间
2.一个线程只能被一个线程锁连接
3.被连接的线程必须是非分离的,否则连接会出错
4.线程返回的结构所使用的内存在调用者完成调用以后必须仍然是有效的。例如,在调用线程的栈上分配了该结构,那面其他的线程在使用这个结构时内存内容可能已经改变了,那么调用pthread_join的线程试图使用该结构时,这个栈有可能已经被撤销,这块内存也已另作他用

总结:
pthrad_join()有两种作用:
1.用于等待其他线程结束。当调用phread_join()时,当前线程会处于阻塞状态,直到被调用的线程结束后,当前线程才会被重新开始执行。
2.对线程的资源进行回收。如果一个线程是非分离的(默认情况下创建的线程都是非分离的)并且没有对该线程使用pthread_join()的话,该线程结束后并不会释放其内存空间,这会导致该线程变成“僵尸线程”。

你可能感兴趣的:(pthread_join)