如果我是對的,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 –