2013-01-07 31 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] –

相關問題