Est-ce que pthread_detach va gérer ma mémoire pour moi?
-
02-07-2019 - |
Question
Supposons que j'ai le code suivant:
while(TRUE) {
pthread_t *thread = (pthread_t *) malloc(sizeof(pthread_t));
pthread_create(thread, NULL, someFunction, someArgument);
pthread_detach(*thread);
sleep(10);
}
Le thread détaché libérera-t-il la mémoire allouée par malloc, ou est-ce quelque chose que je dois maintenant faire?
La solution
Non. pthread_create () n'a aucun moyen de savoir que le pointeur Thread qui lui a été transmis a été alloué de manière dynamique. pthreads n'utilise pas cette valeur en interne; il renvoie simplement le nouvel identifiant de fil à l'appelant. Vous n'avez pas besoin d'allouer dynamiquement cette valeur; vous pouvez plutôt transmettre l'adresse d'une variable locale:
pthread_t thread;
pthread_create(&thread, NULL, someFunction, someArgument);
Autres conseils
Vous devez libérer la mémoire vous-même. Il serait préférable d’allouer simplement la variable pthread_t sur la pile au lieu du tas.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow