Pthread_detach gestirà la mia memoria per me?
-
02-07-2019 - |
Domanda
Supponiamo che io abbia il seguente codice:
while(TRUE) {
pthread_t *thread = (pthread_t *) malloc(sizeof(pthread_t));
pthread_create(thread, NULL, someFunction, someArgument);
pthread_detach(*thread);
sleep(10);
}
Il thread rimosso libererà la memoria allocata da malloc o è qualcosa che ora devo fare?
Soluzione
No. pthread_create () non ha modo di sapere che il puntatore thread passato ad esso è stato allocato dinamicamente. pthreads non utilizza questo valore internamente; restituisce semplicemente il nuovo ID thread al chiamante. Non è necessario allocare dinamicamente quel valore; puoi invece passare l'indirizzo di una variabile locale:
pthread_t thread;
pthread_create(&thread, NULL, someFunction, someArgument);
Altri suggerimenti
Devi liberare la memoria da solo. Sarebbe preferibile allocare semplicemente la variabile pthread_t nello stack rispetto all'heap.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow