2009-11-06 11 views
8

digamos que:¿Puede un pthread realizar la limpieza por sí mismo?

  • malloc un pthread_t para la celebración de un contexto hilo

  • pthread_create con como parámetro de usuario el puntero a la estructura pthread_t

En otras palabras, el hilo la función tiene acceso a su estructura de contexto pthread_t. Ahora aquí está el truco:

¿Cómo puede pthread salir por sí mismo y obtener el contexto pthread_t liberado de alguna manera? es decir, ¿es posible no involucrar el hilo principal? (sin mutex/join, etc.)

Piense en esto como un "proceso liviano".

(y no el hilo no puede free() la estructura justo antes de salir de su thread_func.

Respuesta

10

El pthread_t que recibe cuando la creación de un hilo no es más que su ID, que se utiliza para hacer referencia a que el hilo de otros hilos.

tener el contexto hilo liberado automáticamente cuando el subproceso termina, debe separarla de la matriz usando hilo pthread_detach()

Si pasa un puntero a la pthread_t regresar de la inicial pthread_create(), puede simplemente free() inmediatamente en la rutina de inicio del nuevo hilo. Si necesita consultar nuevamente el valor pthread_t para el hilo actual, simplemente llame al pthread_self(). Sin embargo, sería mucho más fácil asignar pthread_t en la pila en el hilo padre, y no molestarse en pasarlo al hilo hijo (o pasar algo más útil).

void *child_routine(void *arg) 
{ 
    pthread_t thread = pthread_self(); 
} 

void parent() 
{ 
    pthread_t thread; 
    pthread_create(&thread, NULL, child_routine, NULL); 
    pthread_detach(thread); 
} 
+0

@Anacrolix: Thanks! Me siento tan tonto: debería haber revisado el archivo de encabezado ('typedef unsigned long int pthread_t;'). – jldupont

+1

Agradezco a las personas que hacen preguntas reales sobre plataformas e idiomas decentes :) –

+1

@jldupont: 'pthread_t' también puede ser un puntero o una estructura. –

Cuestiones relacionadas