Wird pthread_detach für mich mein Gedächtnis verwalten?
-
02-07-2019 - |
Frage
Angenommen, ich habe den folgenden Code:
while(TRUE) {
pthread_t *thread = (pthread_t *) malloc(sizeof(pthread_t));
pthread_create(thread, NULL, someFunction, someArgument);
pthread_detach(*thread);
sleep(10);
}
Wird der freistehende Thread der von malloc Speicher freigeben, oder ist das etwas, was ich jetzt tun?
Lösung
Nein. pthread_create () hat keine Möglichkeit zu wissen, dass die Thread Zeiger auf gebenen dynamisch zugewiesen wurde. pThreads diesen Wert nicht intern verwendet werden; es gibt einfach die neue Thread-ID an den Anrufer. Sie müssen nicht dynamisch, um diesen Wert zuweisen; Sie können die Adresse einer lokalen Variablen übergeben statt:
pthread_t thread;
pthread_create(&thread, NULL, someFunction, someArgument);
Andere Tipps
Sie müssen den Speicher selbst befreien. Es wäre besser, einfach die pthread_t Variable auf dem Stapel zuweisen, wie in den Heap gegenüber.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow