如果我是对的,std :: async会使用一个新线程并调用其中的方法。我想知道如果主线程或父线程死亡会发生什么。控制异步方法的线程是否也会死掉。如果父/主线程死掉,std :: async调用会发生什么
2
A
回答
7
在C++中没有“父”线程的概念,每个线程都独立于它所创建的那个线程。但是,main
线程是特殊的,如果它从main()
返回或调用exit()
,那么即使其他线程仍在运行,整个应用程序也会终止。一旦发生这种情况,如果仍在运行的线程访问主线程栈中的任何全局变量或自动对象,或者使用任何标准库对象或调用信号处理程序中不允许的任何函数,则程序具有未定义的行为。
总之,如果您期望得到明智的结果,请不要让其他线程在main
完成后运行。
+0
您能引用相关的标准吗?在'main()'退出后我没有发现任何与执行的线程有关的东西(或者我在错误的地方看到:1.10和3.30都不包含任何东西)。 –
+0
显然,在'main'退出之后访问'main'中的任何栈变量都是未定义的,其他情况由3.6.3 [basic.start.term] –
相关问题
- 1. 线程分配内存,主进程死亡,会发生什么?
- 2. 如果一个ThreadPool线程死亡会发生什么?
- 3. 如果一个std ::线程调用本身可以加入,会发生什么?
- 4. 线程内线程:如果父线程被终止会发生什么?
- 5. 如果我调用WaitHandle.Dispose(),等待线程会发生什么?
- 6. 如果从主线程外部调用dispatch_main,会发生什么情况?
- 7. Android:如果主线程在工作线程之前完成,会发生什么?
- 8. 当主线程调用sys.exit()时,其他线程会发生什么?
- 9. 如果Python线程在获取锁后死亡会发生什么?
- 10. 如果某个线程死于临界区域内会发生什么情况?
- 11. 如果调用对象被释放,调度线程会发生什么?
- 12. 线程死时子进程死掉
- 13. 如果当前线程崩溃,那么readwritelock会发生什么
- 14. 会发生什么?
- 15. 当主线程针对另一个调度队列发出dispatch_sync时,主队列/主线程会发生什么?
- 16. 如果您在睡眠线程中调用interrupt()会发生什么?
- 17. 在Linux中发生死Java线程发生了什么?
- 18. 如果我调用GlobalLock()然后调用GlobalUnlock()会发生什么?
- 19. 如果我用cPanel杀死PHP脚本中的进程会发生什么?
- 20. 在Java中,如果一个线程死亡,另一个线程会发生什么?
- 21. 工作线程发布消息时,如果主线程忙,会发生什么情况?
- 22. 调用accept()的线程会发生什么?
- 23. 当某个线程调用Thread.interrupt()时,会发生什么?
- 24. 会发生什么?
- 25. 为什么它不会发生死锁?
- 26. 线程结束后会发生什么?
- 27. ConcurrentHashMap.clear()读线程会发生什么?
- 28. 从工作线程调用UI线程时发生死锁
- 29. 当主线程终止时,SynchronizationContext会发生什么?
- 30. 如果线程是从dll创建的,则std :: async会阻止进程退出?
如果主线程死掉,程序的所有线程都会中断,程序将终止。如果父线程不是主线程,并且它死了,我猜想没有任何事情发生在子线程上。我不发表这个答案,因为我不是100%肯定的,老实说,我不知道所有的细节。 –
_“如果我是正确的,std :: async使用一个新的线程并调用它的方法。”_你实际上是错的... –
@ K-ballo:不是我不同意你,但我认为它将适合陪伴你的判断和一些解释,或者你的评论对于OP –