2013-11-24 42 views
-2

因此可以说你在main(线程1)中创建一个线程。该线程从文件中获取一些输入,并创建多个其他线程(线程2 ...等)来处理某些内容。在退出线程1之前是否必须退出其他线程(线程2 ...)?如果是这样,我将如何去等待线程1产生的所有线程完成?在离开启动它的线程之前,您是否必须等待子线程完成?

+0

https://computing.llnl.gov/tutorials/pthreads/ –

+0

“通过让main()显式调用pthread_exit()作为最后一件事情,main()会阻塞并保持活动状态以支持它的线程。直到完成为止。“这对于其他不是主要的线程适用吗?所以如果我在线程1的末尾有pthread_exit(),它会等待其他线程? – Doug

+2

@mashedtatoes如果应用于其他线程,则不一致。其他线程*不能从'main'返回,也不能在其他线程中阻塞'main'。所以这没有任何意义。如果其他线程调用'pthread_exit',则它们退出。 –

回答

0

不,您不必等待其他线程退出,在大多数情况下。整个线程的重点是启动一个子进程,它主要独立于启动它的线程。

如果您不在乎线程何时退出,您通常应该分离线程。否则,它会假设你关心它的退出状态,并且它会坐在那里占用资源 - 即使退出后 - 直到某个其他线程加入它以检索退出状态。

+0

好的,谢谢你,我刚刚了解到创建多个进程,现在我正在学习线程,所以我对我的任务有点困惑。 – Doug

1

线程间没有父/子关系。线程都是同伴。线程启动另一个线程并没有什么区别,所有线程都是包含它们的进程的相同部分。

有关调用从mainpthread_exit特殊规则仅适用于因为main返回终止过程。其他线程没有这种担心 - 他们只能通过调用exit或类似的函数来终止进程。

请注意,您应该要么加入或分离每个线程。你可以分离你的所有线程,然后你不必担心加入它们 - 它们只会运行完成,然后自行清理。

相关问题