Cómo eliminar un hilo terminado de un proceso en ejecución.
Lo siento si la pregunta es bastante básica, pero he buscado en la documentación de QNX, probando todas las funciones que pueden terminar un hilo que no funcionan.
Tengo este programa de prueba que crea 2 hilos y hace que uno de ellos (el que tiene el main()) se ejecute para siempre mientras que el otro se termina en pthread_exit()
Al iniciar, escribir pidin | grep devolverá dos hilos en un proceso como se esperaba. Pero después de que se ha terminado un hilo, volver a ejecutar pidin | grep mostrará dos hilos, uno de ellos con estado DEAD. Sé que el hilo DEAD no se puede acceder de nuevo a menos que se unan cuando no están separados. Sin embargo, quiero saber si hay una manera de salir de un hilo y eliminarlo completamente del proceso, para que al escribir pidin | grep en el proceso de nuevo, se muestre solo un hilo funcionando en lugar de dos.
Gracias.
davy.ai
Desafortunadamente, no hay forma de eliminar completamente un hilo terminado de un proceso. Incluso después de que se termina un hilo, sus recursos (como su pila y su bloque de control de hilo) todavía son retenidos por el proceso hasta que el proceso mismo se termine. Lo mejor que se puede hacer es separar el hilo antes de terminarlo, para que sus recursos sean limpiados automáticamente por el sistema.
Para separar un hilo se puede llamar a la función pthread_detach(pthread_t thread) antes de terminarlo. Esto permitirá que el hilo sea limpiado automáticamente cuando salga, sin requerir una llamada a pthread_join().
Aquí se muestra cómo se puede modificar el código para separar el hilo antes de terminarlo:
Tenga en cuenta que después de separar un hilo, ya no es necesario llamar a pthread_join() para esperar a que salga. En su lugar, simplemente se puede retornar desde la función principal y dejar que el proceso se termine normalmente.</string.h></stdio.h></stdlib.h></pthread.h>