2012-01-05 9 views

Respuesta

9

dos razones que vienen a la mente: pthread_exit

  1. le permite salir de un hilo desde cualquier profundidad en la pila de llamadas.

  2. Must be called on the main thread if the TLS keys for the main thread are to have their free functions called. Y aquí también: "Los controladores de limpieza de cancelación que se han insertado y no se han reventado se invierten en el orden inverso al que se presionaron y luego se ejecutaron. Después de ejecutar todos los controladores de limpieza de cancelación, si el hilo tiene datos específicos de subproceso, se invocarán funciones de destrucción apropiadas en un orden no especificado ... Se realiza una llamada implícita a pthread_exit() cuando un subproceso diferente al subproceso en el que main() se invocó por primera vez regresa desde la rutina de inicio que se usó para crearlo. El valor de retorno de la función sirve como el estado de salida del hilo ".

+1

No estoy de acuerdo. En estos dos casos, pthread_exit aún puede ser reemplazado por return. –

+3

Para el n. ° 1, sí, pero podría no ser conveniente hacerlo. Para # 2, no puede. Ver el enlace que publiqué Me encontré con esto en el mundo real recientemente. –

+4

@Mengfei: 'pthread_exit()' solo puede reemplazarse por 'return' si estás en la función iniciada por' pthread_create() '. Si el subproceso es más profundo en una pila de llamadas a función, 'return' no hará lo mismo. –

3

Si vas a llamar pthread_exit una interfaz duplicada, entonces también debe llamar exit() una interfaz duplicada, ya que es posible salir del programa en un punto arbitrario. Probablemente desee llamar al pthread_exit() cuando tenga algún tipo de condición de error donde simplemente no puede continuar. O bien, como alternativa, ha encontrado el valor que está buscando dentro del hilo.

cuanto a su existencia real, de acuerdo a la documentation:

una llamada implícita a pthread_exit() se hace cuando un subproceso distinto del subproceso en el que main() se invoca primero vuelve a la rutina de inicio eso fue usado para crearlo. El valor de retorno de la función sirve como el estado de salida de la secuencia.

Así que si usted hizo un return <some pointer> de la rosca, o simplemente llegado al final, pthread_exit() se llamaría de todos modos. Es lo mismo con salir de main(), si return 0 en realidad está llamando al exit(0). La función debe existir, de lo contrario, el kernel no tendría una forma de determinar si el hilo salió.

Cuestiones relacionadas