2011-09-01 94 views
7

This question有關。跨線程的異常傳播?

C++ 11增加了將異常組織到不同線程(使用std::exception_ptr)並恢復其傳播的功能。

我想知道如果這種傳播是自動的,那就是:如果我無法處理線程中的異常,它會自動在父線程中傳播嗎?

我有點懷疑它(或者它將不得不以某種方式明確地等待join),但我對C++ 11尚不瞭解。值得注意的是,我認爲在std::future的情況下,它可以自動存儲異常。

回答

8

傳播不是自動與thread。如果一個線程拋出,並且該異常未被捕獲,程序無論如何終止。

future and shared_future將在子線程中存儲未捕獲的異常。然後該異常會在調用get時自動傳播。