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”.

Qué pasa con un hilo cuando termina

Recursos que se quedan ocupados si no haces join o detach

Cómo se liberan

Diferencia clave entre join y detach

La 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

En resumen:

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.