2011-09-01 15 views
7

in relazione a This question.Propagazione di eccezione tra thread?

C++ 11 aggiunge la possibilità di eseguire il marshalling di un'eccezione a thread diversi (utilizzando std::exception_ptr) e riprende la sua propagazione.

Mi chiedevo se tale propagazione fosse automatica, ovvero: se non riesco a gestire un'eccezione in un thread, viene propagata automaticamente nel thread principale?

In qualche modo dubito (o sarebbe necessario attendere esplicitamente per lo join in qualche modo), ma non sono ancora esperto su C++ 11. In particolare, penso che nel caso di un std::future, potrebbe memorizzare automaticamente l'eccezione.

risposta

8

La propagazione non è automatica con thread. Se un thread genera e quell'eccezione non viene rilevata, il programma termina indipendentemente da cosa.

future e shared_future memorizzeranno un'eccezione non rilevata nel thread secondario. Tale eccezione viene automaticamente propagata quando viene chiamato get.

Problemi correlati