C ++ 11 unir com segurança um thread sem usar um bloco try / catch

De acordo com a documentaçãoAqui eAqui, o método de junção de um encadeamento C ++ 11 lançará umstd::system_error E sejoinable() == false. Assim, a maneira natural de esperar por um encadeamento para concluir a execução é algo nos moldes de:

if (thread2.joinable()) thread2.join();

No entanto, isso tem a possibilidade de lançar um std :: system_error. Considere thread1 chama thread2.joinable (), retorna true, indicando que o thread2 ainda está em execução. Em seguida, o agendador pausa o thread1 e alterna os contextos para o thread 2. O thread 2 é concluído e, em seguida, o thread 1 é retomado. O segmento 1 chama thread2.join (), mas o thread2 já foi concluído e, como resultado, std :: system_error é lançado.

Uma solução possível é envolver a coisa toda em um bloco try:

try {
    thread2.join();
catch (std::system_error &e) {}

Mas quando um std :: system_error legítimo é lançado, possivelmente para indicar que o encadeamentonão conseguiu participar, o programa continua, agindo como se tudo estivesse bem e dandy. Existe uma maneira correta de ingressar em um thread além de usar um bloco try / catch como este?

questionAnswers(1)

yourAnswerToTheQuestion