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 inter threads


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Points : 406
    Points
    406
    Par défaut communication inter threads
    Bonjour,

    Sujet classique, mais j'ai une question sur un cas un peu particulier.

    Jusqu'ici j'utilise les pipe pour communiquer entre thread.
    Mais je me trouve dans un cas ou une certaine catégorie de thread doivent recevoir les meme messages.
    C'est à dire que lorsque mon thread A doit envoyer des messages aux threads B C D E, il doit toujours l'envoyer a tous (jamais a B seulement par exemple).

    Y a t'il un meilleur moyen que 4 pipe (un chacun) ou on enverai 4 fois ce message ?

    merci

  2. #2
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    Une shm (shared memory) ?
    Ou encore une message queue

    y'a le choix :-)

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Goundy Voir le message
    Une shm (shared memory) ?
    Avec des threads ? La mémoire est déjà partagée (même processus).

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Points : 406
    Points
    406
    Par défaut
    ça n'explique pas comment gérer un message qui serait lu, une et une seule fois par tous les thread, puis qui serait supprimé. Avec les variables partagées on ne peut pas gerer une liste de message si ?

  5. #5
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Avec des threads ? La mémoire est déjà partagée (même processus).
    Aouch quand il parlait de pipe j'avais compris process en effet !

    Citation Envoyé par pasdeface Voir le message
    ça n'explique pas comment gérer un message qui serait lu, une et une seule fois par tous les thread, puis qui serait supprimé. Avec les variables partagées on ne peut pas gerer une liste de message si ?
    Une liste chaînée pour les messages, et dans chaque node stocker un compteur qui est incrémenté de 1 à chaque accès (en lecture) au message. Une fois que le compteur atteigne le nombre de threads tu delete le node.
    C'est la première solution qui me passe par l'ésprit ^^


    Euh juste une question, comment ça tes threads communiquent par le biais de pipe ?

  6. #6
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Citation Envoyé par Goundy Voir le message
    Euh juste une question, comment ça tes threads communiquent par le biais de pipe ?
    J'imagine qu'un thread écrit d'un côté du pipe, et qu'un autre lit l'autre côté. Rien n'empèche un process de s'envoyer des données à lui même.

  7. #7
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    Citation Envoyé par matafan Voir le message
    J'imagine qu'un thread écrit d'un côté du pipe, et qu'un autre lit l'autre côté. Rien n'empèche un process de s'envoyer des données à lui même.
    Oui mais ça me parait très lourd d'utiliser les pipes pour une rétro-communication donc bon.
    J'aurais utilisé des message queue pour ça :-)

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par Goundy Voir le message
    Oui mais ça me parait très lourd d'utiliser les pipes pour une rétro-communication donc bon.
    J'aurais utilisé des message queue pour ça :-)
    Oui c'est bien comme ça que ça marche. C'est assez courant d'utiliser les pipe meme entre thread d'après ce que j'ai vu. Mais ce n'est pas moi qui avait écrit ce soft, et ça permet aussi d'envoyer des messages depuis l'exterieur.

    Et puis ce n'est pas une communication intensive, mais plutot ponctuelle, donc ca ne pose pas de problème de perfs.

  9. #9
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par Goundy Voir le message
    Une liste chaînée pour les messages, et dans chaque node stocker un compteur qui est incrémenté de 1 à chaque accès (en lecture) au message. Une fois que le compteur atteigne le nombre de threads tu delete le node.
    C'est la première solution qui me passe par l'ésprit ^^
    je pense que c'est une bonne solution aussi, mais pense à utiliser des mutex pour eviter les acces simultannée à la donnée (et surtout ecriture simultannée qui donnera un comportement aleatoire). Dans les tutoriaux il y a surement une explication sur les mutex. En gros c'est comme des verroux sur les données qui "bloque" les threads quand ils veulent acceder à une donnée qu'un autre thread est deja entrain d'acceder.

Discussions similaires

  1. Communication inter-threads par stdout sous linux
    Par millerf dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 17/07/2007, 11h28
  2. Réponses: 4
    Dernier message: 15/06/2007, 10h41
  3. Communication inter-threads: methode elegante?
    Par jc_isd dans le forum C++
    Réponses: 10
    Dernier message: 17/01/2007, 10h55
  4. [c#]Communication inter thread
    Par chasse dans le forum Windows Forms
    Réponses: 6
    Dernier message: 18/12/2006, 20h45
  5. communication inter-thread en c sous linux
    Par splinternabs dans le forum POSIX
    Réponses: 17
    Dernier message: 22/02/2006, 09h34

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