Los recursos de cada hilos se tiene que liberar de manera explicita, el kernell no lo hace por nosotros. Es decir los datos de su TCB tiene que liberarse y hay que evitar que se dejen los “hilos zombie”.
start_routine retorna o hace pthread_exit), el kernel marca al hilo como “terminado”, pero no borra inmediatamente su TCB ni su pila.pthread_join o pthread_detach, el kernel sabe que puede limpiar esos recursos.join o detachpthread_join(hilo, &retval)
pthread_detach(hilo)
join y detachLa diferencia no está en qué recursos se liberan (ambos liberan lo mismo), sino en qué haces con el valor de retorno del hilo:
| Función | ¿Libera TCB, pila, metadatos? | ¿Recoge valor de salida? |
|---|---|---|
pthread_join |
✅ Sí | ✅ Sí |
pthread_detach |
✅ Sí | ❌ No |
El kernel NO libera automáticamente los recursos de un hilo al terminar, salvo que hagas join o detach.
Ambas funciones liberan los mismos recursos (TCB, pila, estructuras internas).
La única diferencia es que join te permite recoger el valor de salida del hilo, mientras que detach no.