2013-01-07 32 views
2

如果我是对的,std :: async会使用一个新线程并调用其中的方法。我想知道如果主线程或父线程死亡会发生什么。控制异步方法的线程是否也会死掉。如果父/主线程死掉,std :: async调用会发生什么

+2

如果主线程死掉,程序的所有线程都会中断,程序将终止。如果父线程不是主线程,并且它死了,我猜想没有任何事情发生在子线程上。我不发表这个答案,因为我不是100%肯定的,老实说,我不知道所有的细节。 –

+0

_“如果我是正确的,std :: async使用一个新的线程并调用它的方法。”_你实际上是错的... –

+1

@ K-ballo:不是我不同意你,但我认为它将适合陪伴你的判断和一些解释,或者你的评论对于OP –

回答

7

在C++中没有“父”线程的概念,每个线程都独立于它所创建的那个线程。但是,main线程是特殊的,如果它从main()返回或调用exit(),那么即使其他线程仍在运行,整个应用程序也会终止。一旦发生这种情况,如果仍在运行的线程访问主线程栈中的任何全局变量或自动对象,或者使用任何标准库对象或调用信号处理程序中不允许的任何函数,则程序具有未定义的行为。

总之,如果您期望得到明智的结果,请不要让其他线程在main完成后运行。

+0

您能引用相关的标准吗?在'main()'退出后我没有发现任何与执行的线程有关的东西(或者我在错误的地方看到:1.10和3.30都不包含任何东西)。 –

+0

显然,在'main'退出之后访问'main'中的任何栈变量都是未定义的,其他情况由3.6.3 [basic.start.term] –

相关问题