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?

War es hilfreich?

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