C ++ 11 se une a un hilo de forma segura sin usar un bloque try / catch

Según la documentación.aquí yaquí, el método de unión de un hilo C ++ 11 lanzará unstd::system_error Sijoinable() == false. Por lo tanto, la forma natural de esperar a que un subproceso finalice la ejecución es algo como:

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

Sin embargo, esto tiene la posibilidad de lanzar un std :: system_error. Considere que el subproceso 1 llama a thread2.joinable (), devuelve verdadero, lo que indica que el subproceso2 todavía se está ejecutando. Luego el programador detiene el hilo1 y cambia los contextos al hilo 2. El hilo 2 se completa, y luego el hilo 1 se reanuda. Thread 1 llama a thread2.join (), pero thread2 ya se ha completado, y como resultado, se lanza std :: system_error.

Una posible solución es envolver todo en un bloque try:

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

Pero luego, cuando se lanza un std :: system_error legítimo, posiblemente para indicar que el hilono se unió, el programa continúa, actuando como si todo estuviera bien y elegante. ¿Hay una forma adecuada de unir un hilo además de usar un bloque try / catch como este?

Respuestas a la pregunta(1)

Su respuesta a la pregunta