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 :

communication inter-thread en c sous linux [Non suivi]


Sujet :

POSIX C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Points : 90
    Points
    90
    Par défaut communication inter-thread en c sous linux
    slt a tous les gars !

    je voudrai savoir comment peut on faire communiquer deux threads entre eux en c sous linux. est il possible de le faire par des pipes ?

  2. #2
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    il est possible d'utiliser des pipes.
    man pipe : il y'as meme un exemple

    tu peux meme utiliser select() avec tes pipes.

    si tu utilise fork,ce sont des process.

    les threads ont l'avantage de partager le meme espace memoire, suivant les besoins on peux utiliser des choses un peu plus legeres que des pipes.
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  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 Re: communication inter-thread en c sous linux
    Citation Envoyé par splinternabs
    je voudrai savoir comment peut on faire communiquer deux threads entre eux en c sous linux.
    L'espace mémoire étant commun, on peut utiliser les globales. Les sémaphores permettent la synchronisation.

    http://emmanuel-delahaye.developpez.com/pthreads.htm
    Pas de Wi-Fi à la maison : CPL

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Points : 90
    Points
    90
    Par défaut
    merci les gars pour vos reponse,
    j'avais deja demandé si je devai utiliser des threads ou des processus créés par des fork, vu le traitement que je doi avoir ca serai plutot des thread que je doi utiliser (selon la reponse obtenue). je dois en faite utiliser 2 threads : le premier gere une ihm développée sur gtk, le second est un serveur utilisant la communication socket. lorsque celui ci recoi des info il doit les transmettre au thread qui doi gerer l'ihm afin de les afficher.

  5. #5
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par splinternabs
    merci les gars pour vos reponse,
    j'avais deja demandé si je devai utiliser des threads ou des processus créés par des fork, vu le traitement que je doi avoir ca serai plutot des thread que je doi utiliser (selon la reponse obtenue). je dois en faite utiliser 2 threads : le premier gere une ihm développée sur gtk, le second est un serveur utilisant la communication socket. lorsque celui ci recoi des info il doit les transmettre au thread qui doi gerer l'ihm afin de les afficher.
    C'est le type même du producteur-consommateur... Exemple classique lorsqu'on regarde les mutex des threads... Tu seras donc beaucoup mieux avec des mutex que des pipes...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Points : 90
    Points
    90
    Par défaut
    j'ai jamais eu l'occasion d'utiliser les mutex, j'espere qu'ils sont pas blocant car ya une ihm qui doit tourner. si vous avez des liens pour de la doc sur les mutex merci de bien vouloir men faire part.

  7. #7
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    j'ai jamais eu l'occasion d'utiliser les mutex, j'espere qu'ils sont pas blocant car ya une ihm qui doit tourner. si vous avez des liens pour de la doc sur les mutex merci de bien vouloir men faire part.
    Emmanuel a déjà donné un lien sur le pthreads. Il ne parle pas (j'ai regardé en diagonale, qu'on me corrige si j'ai tort) de la fonction pthread_mutex_trylock qui te servirait...
    http://www2.yo-linux.com/cgi-bin/man...ead_mutex_lock
    Jc

  8. #8
    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 fearyourself
    Emmanuel a déjà donné un lien sur le pthreads. Il ne parle pas (j'ai regardé en diagonale, qu'on me corrige si j'ai tort) de la fonction pthread_mutex_trylock qui te servirait...
    http://www2.yo-linux.com/cgi-bin/man...ead_mutex_lock
    Jc
    Exact. Je ne connais pas toutes les ficelles des pthreads (joke inside), juste la base...
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Exact. Je ne connais pas toutes les ficelles des pthreads (joke inside), juste la base...
    Joli!

  10. #10
    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 fearyourself
    Citation Envoyé par Emmanuel Delahaye
    Exact. Je ne connais pas toutes les ficelles des pthreads (joke inside), juste la base...
    Joli!
    Le truc rigolo, c'est que ce n'était pas intentionnel. C'est en me relisant que je l'ai découverte !
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Points : 90
    Points
    90
    Par défaut
    merci encore pour votre aide,
    j'ai pigé le principe des mutex (il me semble !) , mais la communication que je veux faire doit etre sur evenement. si je me trompe pas, lorsque j'utilise les mutex je dois passer par de la scrutation pour lire les données nécessaires, or la je dois envoyer un evenement pour signaler que des infos sont prete a etre lues. je ne peux pas passer par la scrutation car ca me bloquerai mon thread, choz que je ne peux pas me permettre. j'ai vu qu'il y a un moyen de gerer les signaux en c, apparemment on les recupere a l'aide de sigaction, mais comment fait on pour les emettre ?

  12. #12
    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 splinternabs
    j'ai vu qu'il y a un moyen de gerer les signaux en c, apparemment on les recupere a l'aide de sigaction, mais comment fait on pour les emettre ?
    raise().
    Pas de Wi-Fi à la maison : CPL

  13. #13
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    je ne sais pas si raise est standard mais puisque tu es sous linux tu peux aussi utiliser sigkill();
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  14. #14
    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 hegros
    je ne sais pas si raise est standard mais puisque tu es sous linux tu peux aussi utiliser sigkill();
    raise() est standard. Sinon, j'aurais précisé le contexte...

    http://www-ccs.ucsd.edu/c/signal.html#raise
    Pas de Wi-Fi à la maison : CPL

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 572
    Points
    41 572
    Par défaut
    En fait, je ne savais même pas que signal.h était standard...
    Donc, tout système C doit savoir gérer les signaux au sein d'un programme?

    (Par contre, j'ai vu que beaucoup de signaux UNIX n'ont rien de standard... Aussi bien SIGKILL, que SIGUSR1 qui sert plus à communiquer...)
    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.

  16. #16
    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 Médinoc
    En fait, je ne savais même pas que signal.h était standard...
    Donc, tout système C doit savoir gérer les signaux au sein d'un programme?
    Oui, certains (pas beaucoup)

    http://www-ccs.ucsd.edu/c/signal.html
    Pas de Wi-Fi à la maison : CPL

  17. #17
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 572
    Points
    41 572
    Par défaut
    Merci.
    Je me coucherai moins idiot ce soir
    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.

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Points : 90
    Points
    90
    Par défaut
    slt les gars,
    le lien qui est proposé par emmanuel est trés interessant, mais je cherche des infos sur les signaux SIGUSR1/2, avec si possible un simple prog pour exemple. aussi j'ai trouvé le pb sur mon appli, en faite sur l'un de mes deux thread il y a gtk, et l'une des fonctions de gtk est blocante car elle atten un evenement, donc tant que celle ci ne recoit pas d'evenement, impossible de recuperer les signaux. si klk1 avait une quelconque idée pour contourner le pb...a+

Discussions similaires

  1. communication inter threads
    Par contremaitre dans le forum C
    Réponses: 8
    Dernier message: 20/11/2008, 10h48
  2. 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
  3. Réponses: 4
    Dernier message: 15/06/2007, 10h41
  4. Communication inter-threads: methode elegante?
    Par jc_isd dans le forum C++
    Réponses: 10
    Dernier message: 17/01/2007, 10h55
  5. [c#]Communication inter thread
    Par chasse dans le forum Windows Forms
    Réponses: 6
    Dernier message: 18/12/2006, 20h45

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