pthread_join() 心已赠人 2022-08-13 14:45 125阅读 0赞 void pthread\_exit(void \*retval) int pthread\_join(pthread\_t th, void \*\*thread\_return) pthread\_join()的调用者将挂起并等待th线程终止,retval是pthread\_exit()调用者线程(线程ID为th)的返回值, 如果thread\_return不为NULL,则\*thread\_return=retval。 需要注意的是一个线程仅允许唯一的一个线程使用 pthread\_join()等待它的终止,并且被等待的线程应该处于可join状态, 即非DETACHED状态 。 \------------------------ for (i = 0; i < 10; i++) \{ if (pthread\_create((pthread\_t \*)&pthr\[i\].id, NULL, (void \*)thr\_function, (void \*)pthr\[i\])) \{ fprintf(stderr, "Create pthread error: %s\\n", strerror(errno)); goto err\_flg; \} \} for (i = 0; i < 10; i++) \{ if (pthr\[i\].id != 0) pthread\_join(pthr\[i\].id, NULL); \} 相关1:pthread\_join是为了防止主线程没有给其他线程执行的时间就返回了而设计的, pthread\_join(thread\_t th,void \*\* thread\_return )是使主线程等待th线程运行结束再运行 相关2:有时候主线程创建子线程后,如果不使用pthread\_join将自己阻塞,自己会先退出而程序结束, 这样子线程的运行可能无法执行完毕就\*\*退出了,这也算是要使用pthread\_join的一个场景吧。 相关3:pthread\_join应该是用来回收线程资源的,当线程结束时调用,在一支程序中一直创建线程,而在 线程结束时又没有用pthread\_join则会造成资源不足,无法继续创建线程的情况. 相关4:pthread\_join回收线程资源,在pthread\_create后父进程就可调用此函数,不过会阻塞父进程直到子进程结束。 pthread\_join()不会阻塞其他子进程。 可以设置线程属性自动回收资源,就不用调用pthread\_join了。
还没有评论,来说两句吧...