¿Pthread_detach manejará mi memoria por mí?
-
02-07-2019 - |
Pregunta
Supongamos que tengo el siguiente código:
while(TRUE) {
pthread_t *thread = (pthread_t *) malloc(sizeof(pthread_t));
pthread_create(thread, NULL, someFunction, someArgument);
pthread_detach(*thread);
sleep(10);
}
¿El hilo separado liberará la memoria asignada por malloc, o es algo que ahora tengo que hacer?
Solución
No. pthread_create () no tiene forma de saber que el puntero hilo que se le pasó se asignó dinámicamente. pthreads no utiliza este valor internamente; simplemente devuelve el nuevo id de hilo a la persona que llama. No es necesario asignar dinámicamente ese valor; puede pasar la dirección de una variable local en su lugar:
pthread_t thread;
pthread_create(&thread, NULL, someFunction, someArgument);
Otros consejos
Necesitas liberar la memoria tú mismo. Sería preferible simplemente asignar la variable pthread_t en la pila en lugar de la pila.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow