Saltar al contenido

return () versus pthread_exit () en las funciones de inicio de pthread

Solución:

(1) En código C ++, usando return hace que la pila se desenrolle y las variables locales se destruyan, mientras que pthread_exit solo está garantizado para invocar a los manejadores de cancelación registrados con pthread_cancel_push(). En algunos sistemas, este mecanismo también hará que se invoquen los destructores de las variables locales de C ++, pero esto no está garantizado para el código portátil — consulte la documentación de su plataforma.

También en main(), return Implícitamente llamará exit(), y así terminar el programa, mientras que pthread_exit() simplemente terminará el hilo, y el programa seguirá ejecutándose hasta que todos los hilos hayan terminado o algunas llamadas de hilo exit(), abort() u otra función que finalice el programa.

(2) El uso de return funciona porque la especificación POSIX lo dice. El valor devuelto se almacena en un lugar donde pthread_join() puede recuperarlo. Los recursos utilizados por el hilo no se recuperan hasta pthread_join() se llama.

(3) Nunca uso el valor de retorno de un hilo en hilos POSIX sin procesar. Sin embargo, tiendo a utilizar funciones de nivel superior, como la biblioteca de subprocesos Boost y, más recientemente, la biblioteca de subprocesos C ++ 0x, que proporcionan medios alternativos para transferir valores entre subprocesos, como futuros, que evitan los problemas asociados con la gestión de la memoria que usted aludir a.

Creo que return desde el start_routine es preferible, porque asegura que la pila de llamadas se desenrolle correctamente.

Esto es aún más importante para C que para C ++, ya que no tiene la magia destructora que limpia el desorden después de las salidas preliminares. Entonces, su código debe pasar por todas las partes finales de las rutinas en la pila de llamadas para hacer freesy similares.

Por qué esto funciona, esto es simple.

Si start_routine regresa, el efecto será como si hubiera una llamada implícita a pthread_exit () usando el valor de retorno de start_routine como estado de salida

Para mi experiencia personal, tiendo a no usar mucho el estado de los hilos terminados. Es por eso que a menudo tengo los hilos comenzados. detached. Pero esto debería depender mucho de la aplicación y ciertamente no es generalizable.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *