Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如果线程在其他线程等待它(加入)之前退出该怎么办?_C_Multithreading_Unix_Pthreads_Pthread Join - Fatal编程技术网

C 如果线程在其他线程等待它(加入)之前退出该怎么办?

C 如果线程在其他线程等待它(加入)之前退出该怎么办?,c,multithreading,unix,pthreads,pthread-join,C,Multithreading,Unix,Pthreads,Pthread Join,例如,如果我创建3个线程并以相同的顺序连接它们。如果第二个线程先退出,那么pthread_join会发生什么情况。程序会一直阻塞直到tid1退出还是直接从pthread_join返回(&tid2,NULL) 如果您加入一个已经结束的线程,pthread\u join将立即返回(并像通常一样销毁线程对象)。当您进行代码调用时: pthread_join(&tid1, NULL); 如果tid1尚未退出,则该调用将被阻止,直到退出为止。如果同时退出tid2,则不会改变此特定调用的行为。但在

例如,如果我创建3个线程并以相同的顺序连接它们。如果第二个线程先退出,那么pthread_join会发生什么情况。程序会一直阻塞直到tid1退出还是直接从pthread_join返回(&tid2,NULL)


如果您加入一个已经结束的线程,
pthread\u join
将立即返回(并像通常一样销毁线程对象)。

当您进行代码调用时:

pthread_join(&tid1, NULL);
如果
tid1
尚未退出,则该调用将被阻止,直到退出为止。如果同时退出
tid2
,则不会改变此特定调用的行为。但在这种情况下,当呼叫确实返回时,下一个呼叫:

pthread_join(&tid2, NULL);
将立即返回,因为
tid2
已退出


如果要在任意线程完成时立即执行某些工作,则需要使用
pthread\u join()
以外的其他方法与“some thread is finished”事件同步。可能是等待一个条件变量,该变量在每个线程完成时发出信号(以及一些机制,例如队列,以便等待的线程可以确定哪个线程发出了完成信号)。另一种可以使用的机制是让线程将信息写入主线程(或控制线程)读取的管道以获取通知。

pthread_join()
不是可怕的“来自”。因此它将首先执行pthread_join(&tid1,NULL),然后立即从pthread_join(&tid2,NULL)返回然后继续等待tid3?
pthread_join(&tid2, NULL);