GNU/Linux >> Tutoriales Linux >  >> Linux

return() frente a pthread_exit() en las funciones de inicio de pthread

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

Además, en main() , return llamará implícitamente a exit() , y así terminar el programa, mientras que pthread_exit() simplemente terminará el subproceso, y el programa seguirá ejecutándose hasta que todos los subprocesos hayan terminado o algunos subprocesos llamen a exit() , abort() u otra función que termine 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 subproceso no se reclaman hasta pthread_join() se llama.

(3) Nunca uso el valor de retorno de un subproceso en subprocesos POSIX sin procesar. Sin embargo, tiendo a usar 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 administración de memoria que usted aludir a.


Creo que return del start_routine es preferible, porque garantiza que la pila de llamadas se desenrolle correctamente.

Esto es incluso más importante para C que para C++, ya que no tiene la magia del destructor 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 free s y 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 el estado de salida

Por mi experiencia personal, tiendo a no usar mucho el estado de subprocesos terminados. Esta es la razón por la que a menudo tengo hilos iniciados detached . Pero esto debería depender mucho de la aplicación y ciertamente no es generalizable.


Linux
  1. ¿Copias de seguridad a nivel de byte versus a nivel de archivo?

  2. ¿Funciones en variables de Shell?

  3. ¿Hora de inicio del proceso con zona horaria?

  4. Habilitar servicios en Linux

  5. ¿Cómo obtener la identificación del subproceso de un pthread en el programa linux c?

Funciones bash

Comience con GNUPlot

Kernel de Linux y sus funciones

pthread_exit frente a retorno

Id. de subproceso frente a identificador de subproceso

¿Cómo comienza PulseAudio?