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?

¿Fue útil?

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
scroll top