IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

POSIX C Discussion :

Thread POSIX et gestion mémoire


Sujet :

POSIX C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 150
    Points : 111
    Points
    111
    Par défaut Thread POSIX et gestion mémoire
    Citation Envoyé par MAN PTHREAD_JOIN(3)
    Quand l’exécution d’un thread joignable s’achève, ses ressources mémoires (descripteur de thread et pile) ne sont pas désallouées jusqu’à ce qu’un autre thread le joigne en utilisant pthread_join.
    Aussi, pthread_join doit être appelée une fois pour chaque thread joignable pour éviter des "fuites" de mémoire.

    Au plus un seul thread peut attendre la mort d’un thread donné. Appeler pthread_join sur un thread th dont un autre thread attend déjà la fin renvoie une erreur.
    Citation Envoyé par MAN PTHREAD_DETACH(3)
    pthread_detach place le thread th dans l’état détaché. Celà garantit que les ressources mémoires consommées par th seront immédiatement libérées lorsque l’exécution de th s’achèvera. Cependant, celà empêche les autres threads de se synchroniser sur la mort de th en utilisant pthread_join.
    Si je ne fait pas un appel a pthread_join() sur un thread créé avec les attributs par défaut et sans appel à la fonction pthread_detach, ses ressources mémoire ne seront jamais libéré ? En terme de code pur si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void fonction(){
    int a;
    }
     
    int main(){
    pthread_t th;
    pthread_create(th,NULL,fonction,NULL);
    sleep(5000);
    }
    l'espace mémoire reservé par la variable a ne sera jamais libéré avant la fin du programme, même si le thread s'achéve ?

  2. #2
    Membre confirmé
    Avatar de DBProg
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Points : 579
    Points
    579
    Par défaut
    En effet, si tu veux que la mémoire soit libérée, il faut faire un pthread_detach, et lorsqu'il se terminera, la mémoire sera libérée.

    En revanche si tu fais un detach, tu ne pourras plus faire un join dessus, mais tu n'en as peut-être pas besoin !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion d'une IHM Qt depuis un thread POSIX
    Par lulafitt dans le forum Multithreading
    Réponses: 1
    Dernier message: 02/03/2011, 00h28
  2. Thread Posix - Linux
    Par taron dans le forum Linux
    Réponses: 4
    Dernier message: 27/07/2005, 00h42
  3. [Gestion mémoire] SetLength sur TDoubleDynArray
    Par MD Software dans le forum Langage
    Réponses: 14
    Dernier message: 24/04/2005, 21h11
  4. Gestion mémoire des Meshes (LPD3DXMESH)
    Par [Hideki] dans le forum DirectX
    Réponses: 1
    Dernier message: 08/07/2003, 20h34
  5. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo