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 :

Attendre la fin de tous les threads


Sujet :

POSIX C

  1. #21
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    décembre 2011
    Messages
    1 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : décembre 2011
    Messages : 1 308
    Points : 3 633
    Points
    3 633
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Je viens d'effectuer des tests supplémentaires, avec des fonctions contenant des pthread_create, qui lancent d'autres fonctions contenant eux-mêmes des pthread_create. Cette fois-ci en plaçant pthread_exit(NULL) à la fin de la fonction main(), exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #include <pthread.h>
    #include <stdlib.h>
    #include <stdio.h>
     
    void* affiche1(void* param){
        int i = 0;
        while(i < 6) {
            printf("Coucou\n");
            sleep(1);
            i++;
        }
    }
     
     
    void* affiche(void* param){
        int i = 0;
     
        pthread_t t2;
        pthread_create(&t2, NULL, affiche1, NULL);
        while(i < 3) {
            printf("Hello\n");
            sleep(1);
            i++;
        }
    }
     
     
     
    int main(){
        affiche(NULL);
        pthread_exit(0);
    }
    Ici pas de DETACHED thread, et on attend que tous les threads exécutés dans le main se terminent proprement avant de quitter le programme.
    Si je devais donner un définition au comportement de pthread_exit, je dirais :
    Lorsque le exit du main est remplacé par pthread_exit, on attend que le processus a.out (nom par défaut du binaire), ait terminé d'exécuter tous ses threads avant que le programme ne se termine.

    Autrement je ne lis cette définition presque nulle part. Sauf dans celui-ci qui y ressemble (merci Bktero) :
    To allow other threads to continue execution, the main thread should terminate by calling pthread_exit() rather than exit(3).
    http://linux.die.net/man/3/pthread_exit
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  2. #22
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    27 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 27 213
    Points : 40 894
    Points
    40 894
    Par défaut
    Ceci marchera comme tu le veux tant que tu n'utiliseras pas de bibliothèque créant des threads qui attendent indéfiniment (bibliothèque de thread pool, etc.)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Comment arrêter tous les Threads ?
    Par Ceubex dans le forum Général Java
    Réponses: 9
    Dernier message: 04/01/2011, 14h10
  2. Réponses: 8
    Dernier message: 19/11/2010, 11h01
  3. Jonas freezé, tous les threads sont occupés
    Par Bouhaouala dans le forum JOnAS
    Réponses: 1
    Dernier message: 07/11/2009, 23h36
  4. Réponses: 7
    Dernier message: 04/02/2008, 16h49
  5. Comment attendre que tous les thread lancés soient morts pour lancer une action.
    Par rgesnot dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 31/03/2007, 20h27

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