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

Threads & Processus C++ Discussion :

Attente d'un thread parmis plusieurs


Sujet :

Threads & Processus C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Par défaut Attente d'un thread parmis plusieurs
    Bonjour,

    J'ai actuellement un main thread qui a besoin de lancer X threads secondaires.
    Je voudrais pouvoir fixer Y, nombre de threads pouvant tourner en parallèle.
    Des que 1 thread est terminé, le main relance un nouveau jusqu'a avoir lancé ces X threads.

    Actuellement tout est lancé d'un trait puis on boucle sur tout les threads en faisant un join, ce qui fait que mon attente depend du premier thread lancé..
    Et donc si le dernier est le plus rapide, je ne le vois pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // Lancement
    for(int i=0; i<nb_thread_a_lancer; i++)
    {
        monThread[i].run(); // Lancement du thread i
    }
     
    // Attente des threads
    for(int i=0; i<nb_thread_a_lancer; i++)
    {
        monThread[i].wait(); // Encapsule un join
    }
    J'aimerais mettre en place un genre de select sur les threads lancé,
    Je pensais a 2 solutions:

    1/ Mettre en place un semaphore a Y etats (je ne sais pas si on dit comme ça), etant habitué des mutex (donc a 2 etats), je ne vois pas trop le principe avec un semaphore a Y etats:
    Je définis dans mon main thread ce semaphore a Y etats, chaque thread lancé tente un wait sur le semaphore (son compteur interne est decrementé), une fois que les Y threads tournent le Y+1 n'est pas autorisé et donc attend le post d'un thread tournant. Est ce ça ?


    2/ Utiliser un principe de fifo de message, mon main thread donne cette fifo a chaque thread lancé, une fois qu'un thread se termine il poste un msg dedans capté par le main qui lance un nouveau thread etc. Sauf que du coup j'aurais une boucle active dans mon main pour capter un message reçu.

    3/ ??

    Qu'est qui est fait en général ?
    Avec une utilisation de la lib standard (mais pas c++11) et boost.

    Merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Tu peux utiliser un threadpool, voir ici par exemple. (la version C++11 de ce même code possède quelques explications supplémentaires, ici)

    En gros, x threads de lancés et qui restent en attente tant qu'il n'y a rien à exécuter.

    Et les threads se servent dans une liste de taches à exécuter.

    Ça à l'avantage d'économiser le coût de construction / destruction des threads (non négligeable pour des taches très courtes).

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Par défaut
    Merci,

    Exact ça peut etre pas mal car la je me suis codé un manageur de thread avec un sémaphore avant le lancement de la tache, libéré a la fin de celle ci.
    Mais effectivement du coup création de thread à chaque coup.
    Les taches ne sont pas courtes mais il y en une quantité non négligeable.

Discussions similaires

  1. Réponses: 5
    Dernier message: 05/08/2010, 16h35
  2. Attente de la fin d'un parmis plusieurs threads
    Par barbug dans le forum Multithreading
    Réponses: 12
    Dernier message: 13/02/2009, 07h46
  3. fenêtre d'attente dans un thread
    Par KRis dans le forum Langage
    Réponses: 3
    Dernier message: 25/08/2005, 10h29
  4. Réponses: 2
    Dernier message: 24/08/2005, 10h59
  5. sélection d'un max parmi plusieurs champs
    Par invitésuprise dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/08/2005, 13h49

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