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 confirmé
    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
    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 éprouvé
    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
    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.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    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

  4. #4
    Membre confirmé
    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
    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 confirmé

    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 : 44
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    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 confirmé
    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
    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 confirmé

    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 : 44
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    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
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    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...

  9. #9
    Expert confirmé

    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 : 44
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    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
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    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 !

  11. #11
    Membre confirmé
    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
    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
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    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().

  13. #13
    Membre extrêmement actif

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

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    je ne sais pas si raise est standard mais puisque tu es sous linux tu peux aussi utiliser sigkill();

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    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

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 391
    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
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    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

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 391
    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 confirmé
    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
    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