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?