Retourner aux forums || Retourner au forum Programmation.c
Programmation.c : Select sur un semaphore ?
Posté par ChickenKiller () le 08 juillet 2008Je ne suis pas forcement très rompu à la programmation thread, aussi je bute sur un "petit" problème:
J'ai un thread A qui est connecté à un équipement (un automate dans mon cas) via socket. Il a une liste chainée de messages a envoyer et il reçoit de manière asynchrone des comptes rendu.
J'ai un autre thread B qui lui remplit la liste du thread A.
Je voudrais que le thread A reste en attente sur le socket et en même temps sur le semaphore lié à la liste pour pouvoir a la fois recupérer les comptes rendu et envoyer les nouveau messages.
J'avais d'abord penser rester sur un recv et que le thread B envoit un signal qui l'interrompe, mais si le thread B est trop "agressif", on ne recupère plus les compte rendu.
Le problème est peut-être plus lié a un problème de conception, dans ce cas je suis ouvert à la critique :-)
D'avance merci.
> Lire le message (9 commentaires, moyenne: 2).
Sémaphore + Socket
Le problème du sémaphore et du select(), c'est qu'à la base, ce sont justement deux systèmes concurrents (BSD et SysV) d'inter-communication.
Mais dans les deux cas, tu peux préciser des jeux de sockets ou de sémaphores qui seront examinés de manière atomique.
Dans ton cas, c'est surtout un select() sur les sockets qui t'intéresse, donc laisse tomber le sémaphore et utilise deux sockets.
Bon courage;
-
[^]Re: Sémaphore + Socket
Posté par ChickenKiller () le 08/07/2008 à 17:30. (lien). Évalué à 1.Si je comprend bien ça serait mettre un socket entre mes 2 threads et passer les infos par ce biais?
J'avais aussi penser à ça mais j'avoue que je trouvais ça un peu lourd. Tant pis! Je vais essayer ça ;-)
Merci.-
[^]Re: Sémaphore + Socket
Posté par Obsidian () le 08/07/2008 à 17:56. (lien). Évalué à 3.Tu utilises quoi pour transmettre tes infos, actuellement ? De la mémoire partagée ? Un tube ? Une file IPC ?
-
[^]Re: Sémaphore + Socket
Posté par ChickenKiller () le 08/07/2008 à 18:34. (lien). Évalué à 1.Actuellement, je passe par une liste chainée protegée par un mutex.
-
[^]Re: Sémaphore + Socket
Posté par Obsidian () le 08/07/2008 à 18:35. (lien). Évalué à 2.Ok, mais comment ta liste chaîne est-elle transmise d'un processus vers l'autre ?
-
[^]Re: Sémaphore + Socket
Posté par ChickenKiller () le 08/07/2008 à 18:45. (lien). Évalué à 1.euuhhhh ....... je me suis sûrement mal exprimé, mais je n'ai qu'un seul processus avec 2 threads.
-
[^]Re: Sémaphore + Socket
Posté par Obsidian () le 08/07/2008 à 19:05. (lien). Évalué à 2.Mouais, en fait, c'est parce que sous Linux, les threads sous-tendent pas mal d'autres choses.
Donc, Je suppose que tu utilises pthread, et que tes deux threads partagent la même espace mémoire par défaut.
Tu n'es donc pas obligé de tout faire passer par ton socket, mais tu peux juste y envoyer un caractère qui servira de signal comme tu le ferais avec un sémaphore.-
[^]Re: Sémaphore + Socket
Posté par ChickenKiller () le 08/07/2008 à 19:13. (lien). Évalué à 2.Désolé pour l'approximation de vocabulaire :-)
Je peux effectivement utiliser le socket comme ça. Je vais tenter cette voie.
Merci !
-
-
-
-
-
-
re
Ptit taff pour les cours sur le select et les sockets, en esperant que cela t'es utile.
http://linuxonfire.free.fr/cnam/socket.pdf
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.c



Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.