Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1222 connectés 

  FORUM HardWare.fr
  Programmation
  C

  thread-safety et buffers

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

thread-safety et buffers

n°1841432
sonick
Posté le 22-01-2009 à 10:12:32  profilanswer
 

Bonjour,
j'ai écrit un programme qui communique avec des boitiers contenant du C embarqué. Pour chacun de ces boitiers, j'ai une socket et trois threads, qui envoient des commandes et reçoivent le résultat.
Le problème est que lorsque j'affiche le contenu du buffer, de temps en temps il contient la valeur du résultat d'une autre commande. J'ai dissocié les buffer pour chaque thread afin d'éviter le problème mais cela continue. J'ai aussi posé des mutex avant et après chaque utilisation des commandes et buffer, et je vide le buffer dès que j'en ai plus besoin. Je me demande ce que j'ai pu omettre pour éviter qu'un buffer soit écrasé. Je compile avec les options :
#define _GNU_SOURCE
#define _REENTRANT
#define _THREAD_SAFE
 
Mais apparemment cela ne suffit pas pour que mes instructions soient thread-safe.
 
Une idée ?

mood
Publicité
Posté le 22-01-2009 à 10:12:32  profilanswer
 

n°1841451
weblook$$
Posté le 22-01-2009 à 10:43:27  profilanswer
 

tu fais bien le printf de ton buffer à l'intérieur de ton mutex , juste après que ton buffer soit initilaisé à une new valeur ?

n°1841452
sonick
Posté le 22-01-2009 à 10:45:13  profilanswer
 

mon mutex n'encadre que l'envoi et la réception via la socket. Faudrait-il qu'il encadre tout, depuis la libération du buffer jusqu'à sa prochaine libération ?

n°1841453
weblook$$
Posté le 22-01-2009 à 10:52:55  profilanswer
 

qu'appels tu libération du buffer ? à part le moment qui correspond au relachement du mutex je ne vois pas et si c'est le cas, je comprends pas ta question... moi ce que je te disais c'est qu'il peut y avoir un problème de synchronisme entre ce que ton buffer contient à un moment X et ce que tu affiches à une date Y. En ce somme que ton programme peut fonctionner parfaitement, mais que ton affichage ne soit pas synchronisé sur le contenu réel de ton buffer. Mais c'est juste une piste possible

n°1841604
Taz
bisounours-codeur
Posté le 22-01-2009 à 14:12:30  profilanswer
 

Pas terrible comme design. Fais plutôt un thread à la syslog: une file de message, un thread qui les affiche et les autres thread poussent des messages vers ce logger.

n°1841635
weblook$$
Posté le 22-01-2009 à 14:50:54  profilanswer
 

oui c'est mieux c'est clair, je valide


Message édité par weblook$$ le 22-01-2009 à 14:51:10
n°1841642
sonick
Posté le 22-01-2009 à 14:56:37  profilanswer
 

OK je vais tenter ça

n°1841903
sonick
Posté le 23-01-2009 à 09:31:19  profilanswer
 

bon j'ai réajusté la position des mutex pour que le buffer ne soit pas écrasé.  
Pour les logs je m'y pencherai plus tard ce n'est pas prioritaire.
Par contre, mon programme ne tourne toujours pas. J'obtiens maintenant un crash pour case de SIGPIPE broken. D'après la doc, cela arrive lorsque on essaye de manipuler une socket qui est invalide. Pourtant, ma socket s'établit bien.
Une quelconque idée de l'origine diu problème ?
Voici un bout de mon code :
http://pastebin.com/m70d34405


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  thread-safety et buffers

 

Sujets relatifs
[RESOLU] Probleme synchro threadCmt répartir les sorties de différents thread sur différents terminaux
Thread JAVAPasser un tableau 2D vers un thread
Interrompre un process lancé par un threadaffecter un thread graphique à une sortie graphique
2 boites de dialogues dans un thread secondairelancer une IHM depuis un worker thread
Affichage dialog dans un threadProblème avec les pointeurs (thread)
Plus de sujets relatifs à : thread-safety et buffers


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR