Forum Programmation.c Select sur un semaphore ?

Posté par  .
Étiquettes : aucune
0
8
juil.
2008
Bonjour cher forum,

Je 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.
  • # Sémaphore + Socket

    Posté par  . Évalué à 4.

    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  . É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  . É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  . Évalué à 1.

          Actuellement, je passe par une liste chainée protegée par un mutex.
          • [^] # Re: Sémaphore + Socket

            Posté par  . Évalué à 2.

            Ok, mais comment ta liste chaîne est-elle transmise d'un processus vers l'autre ?
            • [^] # Re: Sémaphore + Socket

              Posté par  . É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  . É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  . Évalué à 2.

                  Désolé pour l'approximation de vocabulaire :-)

                  Je peux effectivement utiliser le socket comme ça. Je vais tenter cette voie.

                  Merci !
  • # re

    Posté par  (site web personnel) . Évalué à 2.

    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

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.