Por lo que tengo entendido, pthread_exit() es exactamente igual a devolver cuando se necesita terminar un hilo con un valor de retorno. Cuando las personas pueden usar la forma consistente, es decir, regresar, para hacer el trabajo ¿por qué Pthread define una interfaz duplicada?Pthread: ¿Por qué las personas se molestan en utilizar pthread_exit?
Respuesta
dos razones que vienen a la mente: pthread_exit
le permite salir de un hilo desde cualquier profundidad en la pila de llamadas.
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 ".
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ó.
- 1. return() versus pthread_exit() en las funciones pthread start
- 2. pixel.gif, ¿por qué las personas lo usan?
- 3. Usando pthread en C++
- 4. ¿Por qué las personas usan linq en sql?
- 5. pthread_join() y pthread_exit()
- 6. ¿por qué pthread_exit arroja algo atrapado por elipsis?
- 7. ¿Por qué las personas siguen creando fuentes RSS?
- 8. pthread_exit vs volver
- 9. ¿Por qué las personas llaman a jQuery $ alias 'fábrica'?
- 10. ¿Por qué las personas usan jQuery para operaciones básicas?
- 11. ¿Por qué razones las personas eligen Ruby sobre Java?
- 12. ¿Por qué las personas definen objeto extiende su clase compañera?
- 13. ¿Qué características o conceptos te molestan en Qt?
- 14. OpenGL: ¿por qué se eliminó la matriz de matriz y qué están usando las personas ahora?
- 15. ¿Por qué las personas usan ATL para la programación COM?
- 16. ¿Por qué pthread_exit() en raras ocasiones causa un SEGV cuando se llama después de pthread_detach()?
- 17. ¿Por qué C# y Java se molestan con el "nuevo" operador?
- 18. ¿Por qué las personas usan Puppet/Chef con Amazon Cloud Formation en lugar de usar CloudInit?
- 19. ¿Por qué las bibliotecas glibc y pthread definieron las mismas API?
- 20. Cuándo o por qué utilizar las importaciones relativas en Python
- 21. Por qué utilizar asp: HyperLink
- 22. ¿Por qué las personas usan valores de magia en lugar de nulo en su código?
- 23. ¿por qué no se recomienda utilizar directivas en C++?
- 24. ¿Por qué las personas asignan $ this = $ (this) en muchos plugins jQuery?
- 25. ¿Por qué utilizar la serialización
- 26. ¿Por qué las personas agrupan rspec bajo prueba y desarrollo en el Gemfile?
- 27. ¿Por qué las funciones de subprocesos deben declararse como '__cdecl'?
- 28. ¿Por qué utilizar un conjunto para las comparaciones de listas?
- 29. ¿Por qué utilizar Autorelease pool?
- 30. ¿Por qué las personas usan enumeraciones en C++ como constantes mientras pueden usar const?
No estoy de acuerdo. En estos dos casos, pthread_exit aún puede ser reemplazado por return. –
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. –
@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. –