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 ?
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 ?
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.
L'espace mémoire étant commun, on peut utiliser les globales. Les sémaphores permettent la synchronisation.Envoyé par splinternabs
http://emmanuel-delahaye.developpez.com/pthreads.htm
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...Envoyé par splinternabs
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...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.
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...Envoyé par fearyourself
Joli!Envoyé par Emmanuel Delahaye
![]()
Le truc rigolo, c'est que ce n'était pas intentionnel. C'est en me relisant que je l'ai découverte !Envoyé par fearyourself
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 ?
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...Envoyé par hegros
http://www-ccs.ucsd.edu/c/signal.html#raise
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.
Oui, certains (pas beaucoup)Envoyé par Médinoc
http://www-ccs.ucsd.edu/c/signal.html
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.
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+
Partager