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

Boost C++ Discussion :

boost::thread_group et parametres


Sujet :

Boost C++

  1. #1
    Membre confirmé Avatar de lyxthe
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 115
    Par défaut boost::thread_group et parametres
    Bonjour à tous, j'ai deux petites questions concernant les threads, j'espère que vous pourrez m'aider.
    pour illustrer mon propos, j'utilise l'exemple suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void func(int num){
      cout << "thread numero " << num << "peut lire l'entier " << ent << endl;
    }
     
    int main(){
      int i,ent;
      ent=15;
      boost::thread_group group;
      for(i=0;i<10;i++){
         group.create_thread(&func(i));
      }
    }
    dans ce code deux choses ne fonctionnent pas :
    1) passer le paramètre "i" dans "group.create_thread(&func(i))" , première question y a-t-il une syntaxe correcte pour faire ça?
    2) sachant que je suis certain qu'il n'y aura pas de conflit sur la lecture de l'entier "ent" dans mes threads, est-il possible d'accéder en lecture ou en écriture à cet entier initialisé dans le main depuis mes threads sans utiliser les mutex ou autre trucs compliqués. Initialiser "ent" en tant que variable global me parait pas propre du tout, mais est-ce une(la seule) solution valable ?

    Voilà en espérant avoir été clair et que vous saurez m'aider.

    Merci

  2. #2
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    Citation Envoyé par lyxthe Voir le message
    1) passer le paramètre "i" dans "group.create_thread(&func(i))" , première question y a-t-il une syntaxe correcte pour faire ça?
    Oui, faire un objet fonction et passer i en param du constructeur.

    Citation Envoyé par lyxthe Voir le message
    2) sachant que je suis certain qu'il n'y aura pas de conflit sur la lecture de l'entier "ent" dans mes threads, est-il possible d'accéder en lecture ou en écriture à cet entier initialisé dans le main depuis mes threads sans utiliser les mutex ou autre trucs compliqués. Initialiser "ent" en tant que variable global me parait pas propre du tout, mais est-ce une(la seule) solution valable ?
    toujours protéger ses variables partagées par des mutex:

    http://www.drdobbs.com/go-parallel/a...leID=224701827

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Si j'ai bien suivi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void func(int num, int& ent){
      std::cout << "thread numero " << num << "peut lire l'entier " << ent << std::endl;
    }
     
    int main(){
      int ent=15;
      boost::thread_group group;
      for(int i=0;i<10;++i){
         group.create_thread(boost::bind(&func,i,boost::ref(ent)));
      }
      return 0;
    }
    Si vraiment t'es sûr qu'il n'y a pas d'accès concurrents, mais ça parait dangereux...

    MAT.

  4. #4
    Membre confirmé Avatar de lyxthe
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 115
    Par défaut
    ok merci beaucoup

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Par défaut
    c'est quoi l'intérêt d'un group thread ?

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Citation Envoyé par guillaume07 Voir le message
    c'est quoi l'intérêt d'un group thread ?
    Typiquement thread_group provides for a collection of threads that are related in some fashion, par exemple pour faire un join_all.

    MAT.

  7. #7
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Par défaut
    fine

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

Discussions similaires

  1. Extraire des parametres L et C d'un hacheur Boost
    Par atam1987 dans le forum Signal
    Réponses: 0
    Dernier message: 23/11/2013, 07h19
  2. Problème boost::thread_group boost::signals2
    Par roy_44 dans le forum C++
    Réponses: 3
    Dernier message: 12/02/2012, 10h05
  3. Réponses: 4
    Dernier message: 14/11/2011, 21h04
  4. [boost] grammar et parametre
    Par Gip_Matthieu dans le forum Boost
    Réponses: 3
    Dernier message: 09/12/2009, 19h22
  5. transmision de tableau en parametre
    Par Horus dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/05/2002, 11h15

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