C 在离开启动它的线程之前,是否必须等待子线程完成?

C 在离开启动它的线程之前,是否必须等待子线程完成?,c,multithreading,pthreads,C,Multithreading,Pthreads,假设您在main中创建了一个线程(线程1)。该线程从文件中接收一些输入,并创建多个其他线程(线程2…等)来处理某些内容。在退出线程1之前,是否必须退出其他线程(线程2…)?如果是这样,我将如何等待线程1生成的所有线程完成?线程之间没有父/子关系。线程都是对等的。哪个线程启动了另一个线程没有区别,所有线程都是包含它们的进程的相等部分 有关从main调用pthread\u exit的特殊规则仅适用,因为从main返回会终止进程。其他线程没有这种问题——它们只能通过调用exit或类似函数来终止进程 请

假设您在main中创建了一个线程(线程1)。该线程从文件中接收一些输入,并创建多个其他线程(线程2…等)来处理某些内容。在退出线程1之前,是否必须退出其他线程(线程2…)?如果是这样,我将如何等待线程1生成的所有线程完成?

线程之间没有父/子关系。线程都是对等的。哪个线程启动了另一个线程没有区别,所有线程都是包含它们的进程的相等部分

有关从
main
调用
pthread\u exit
的特殊规则仅适用,因为从
main
返回会终止进程。其他线程没有这种问题——它们只能通过调用
exit
或类似函数来终止进程


请注意,您应该连接或分离每个线程。您可以分离所有线程,然后再也不用担心加入它们——它们只需运行到完成,然后进行清理。

不,在大多数情况下,您不必等待其他线程退出。线程的全部意义在于启动一个子进程,它在很大程度上独立于启动它的线程


但是,如果您不关心线程将如何/何时退出,通常应该分离线程。否则,它会假设您关心它的退出状态,它会坐在那里占用资源——即使在它退出之后——直到其他线程加入它来检索退出状态。

“让main()像它最后做的事情一样显式调用pthread_exit(),main()将阻止并保持活动状态,以支持它创建的线程,直到它们完成为止。”对于其他非主线程,这是否适用?因此,如果在线程1的末尾有pthread_exit(),它将等待其他线程?@mashedtatoes,如果应用于其他线程,这是不一致的。其他线程不能从
main
返回,也不能在其他线程中阻塞
main
。所以这没有任何意义。如果其他线程调用
pthread\u exit
,它们就会退出。好的,谢谢你,我刚刚学习了创建多个进程,现在我正在学习线程,所以我对我的任务有点困惑。