2011-05-15 4 views
0

J'essaie d'obtenir une fonction pour démarrer un autre thread, puis revenir, avec le thread en cours d'exécution. Il semblerait que pthread_detach() prenne soin de la mémoire et d'autres choses pour moi, bien que je ne sois pas entièrement sûr. Tel est le code de la fonction:Utilisation correcte de pthread_detach

void function() { 
    pthread_mutex_lock(&state.continueLoopingMutex); 
    if(state.continueLooping == true) { 
     pthread_mutex_unlock(&state.continueLoopingMutex); 
     return; 
    } 
    state.continueLooping = true; 
    pthread_mutex_unlock(&state.continueLoopingMutex); 
    pthread_t thread; 
    pthread_create(&thread, NULL, runLoop, NULL); 
    pthread_detach(thread); 
} 

(La boucle s'arrête lorsque continueLooping est définie sur false, une fois que la boucle se termine, il retourne juste sans rien faire d'autre).

Y at-il un problème avec cette structure qui provoquerait une fuite de mémoire, etc., dont je devrais me préoccuper?

Merci

Répondre

3

Je ne vois rien de mal.
Oui, le pthread_detach prendra soin de libérer les ressources du thread.

2

Si vous souhaitez que les threads continuent à s'exécuter simultanément, cela ne fera aucune différence que vous détacherez le thread ou non. Mais il sera plus difficile ou moins idiomatique de collecter des ressources (comme une valeur de retour) à partir d'un thread détaché. Et oui, ce morceau de code n'expose pas les fuites de mémoire.