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

C++ Discussion :

communication entre threads


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2007
    Messages : 22
    Points : 16
    Points
    16
    Par défaut communication entre threads
    Bonjour,
    j'ai un petit problème,
    J'ai deux threads qui fonctionnent suivant le modèle producteur/Consommateur. un thread qui attend sur un select, une fois qu'il recoit quelque chose, il la met dans une FIFO. et un autre thread qui lit à partir de la FIFO. Pour cela dans chacun des threads, j'utilise une boucle infinie de type while(true). Pour le premier thread qui fait la réception, j'ai pas de problème car le select est bloquant. Par contre pour le thread qui lit à partir de la FIFO, mon problème que le thread teste toujours la FIFO pour voir s'il y a de nouvelle données du coup mon utilisation CPU est toujours de 90%. J'ai essayé d'utiliser le pthread_cond_t pour régler ca en programmant en C++, mais j'arrive pas.
    Svp, y a t'il une autre façon de faire ca ?

    Merci bcp

    Sara

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Thread reader
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    pour toujours
       attendre evenement
       tant que FIFO pas vide
          lire FIFO
          traiter message lu
       fin tant que
    fin pour toujours
    thread writer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    ajouter message dans FIFO
    signaler evenement
    ...
    L'evenement que j'utilise sous Microsoft est créé par CreateEvent()
    http://msdn2.microsoft.com/en-us/lib...96(VS.85).aspx et cela marche très bien

    Si tu es sous une autre plateforme, il doit exister un équivalent (peut être chez boost)

    Par contre, ne pas oublier de protéger la FIFO par une section critique car 2 thread peuvent tenter d'y accéder simultanément.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre expérimenté

    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
    Points : 1 516
    Points
    1 516
    Par défaut
    Salut,

    Citation Envoyé par dc.sara Voir le message
    Svp, y a t'il une autre façon de faire ca ?
    Tu peux utiliser Boost.Asio qui gère tout ça pour toi.

    MAT.

  4. #4
    Provisoirement toléré
    Profil pro
    Inscrit en
    février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2008
    Messages : 439
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par dc.sara Voir le message
    J'ai deux threads qui fonctionnent suivant le modèle producteur/Consommateur.
    Typique...

    Citation Envoyé par dc.sara Voir le message
    Par contre pour le thread qui lit à partir de la FIFO, mon problème que le thread teste toujours la FIFO pour voir s'il y a de nouvelle données du coup mon utilisation CPU est toujours de 90%.
    Comment est définie ta FIFO? Comment synchronises-tu les deux threads?

    Montre-nous le code qui sert à manipuler la FIFO.

    Citation Envoyé par dc.sara Voir le message
    J'ai essayé d'utiliser le pthread_cond_t pour régler ca en programmant en C++, mais j'arrive pas.
    Une condition pthread peut effectivement servir à signaler que des données sont présentes, c'est même l'exemple canonique d'utilisation des "variables de condition".

Discussions similaires

  1. [C#] Communication entre thread
    Par kekesilo dans le forum Windows Forms
    Réponses: 11
    Dernier message: 17/09/2007, 19h48
  2. [thread] communication entre threads
    Par untipy dans le forum Concurrence et multi-thread
    Réponses: 11
    Dernier message: 30/08/2007, 15h47
  3. Problème de communications entre threads
    Par maya09 dans le forum Windows
    Réponses: 1
    Dernier message: 22/02/2006, 22h18
  4. Communication entre thread
    Par JFPS Soft dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 03/02/2006, 17h38
  5. [c#][threading] communication entre threads
    Par orelero dans le forum C#
    Réponses: 6
    Dernier message: 02/01/2006, 00h42

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