Forum Programmation.java un mutex en java

Posté par .
Tags : aucun
0
7
nov.
2005
bonjour,

je suis en train de lire un code JAVA (je ne parle pas le JAVA) et j'ai trouvé une horrible race condition.

Comment faire pour mettre un mutex dans la routine qui est appellée de manière concurrente ? y'a pas un objet mutex tout prêt ?

En gros ma routine s'appelle ReadWriteConf()

et j'aimerai qu'elle comment par

mutex.lock

et qu'elle se termine par

mutex.unlock pour que les appels concurrents soient sérialisés.

J'ai cherché dans l'API java 1.4 mais je suis perdu.

merci d'avance
  • # .

    Posté par . Évalué à 2.

    copie-colle les quelques lignes de code pour voir ...
  • # synchronized

    Posté par . Évalué à 4.

    Franchement je ne fais pas cela depuis longtemps donc je n'ai plus qu'une idée vague mais en gros tu peux mettre la méthode synchronized pour qu'il n'y ai pas d'appels concurrents sur la méthode.
    Tu peux faire plus fin en posant le synchronized sur un objet qui sert alors de mutex.
    L'aide sûre c'est par là : http://penserenjava.free.fr/pens_2.4/indexMainde39.html?chp=(...)
  • # essaye avec synchronize(Object o)

    Posté par (page perso) . Évalué à 1.

    ça permet de places une espèce de moniteur sur la resource "o" pour l'appel concurrent

    Tu peut sinon déclarer ta méthode "synchronized" (ce qui revient a l'englober de synchronize(this) )
    A priori, tu dois pouvoir trouver une excellente explication dans le Thinking in Java, de Bruce Eckel, qui est disponible en ligne
    • [^] # Re: essaye avec synchronize(Object o)

      Posté par . Évalué à 2.

      merci à tous,

      J'ai mis synchronized pour la méthode et j'ai lu la doc, me voilà rassuré...

      Je ne poste pas le code de la routine (sans intérêt)

      en gros

      void maMethodeCritique

      est devenu

      void synchronized maMethodeCritique


      Puisssssssssant le java, un peu usine à gaz mais puissant.
      • [^] # Re: essaye avec synchronize(Object o)

        Posté par (page perso) . Évalué à 1.

        un peu usine à gaz

        c'est un troll consensuel au moins.
      • [^] # Optimisations : essaye avec synchronize(Object o)

        Posté par . Évalué à 2.

        Salut,

        Il est conseillé de mettre plutôt le synchronised dans la méthode
        plutot que sur la méthode pour ne pas "locker" ton object.
        Voilà le code que j'utilise :

        public class HelloWorld
        {
        protected Object mHelloWorldMutex = new Object();

        public void HelloWorldMethod
        {
        synchronized(mHelloWorldMutex)
        {
        ...
        // ici ton code a synchroniser
        ...
        }
        }
        }

        Voilà,
        a+
        Xavier
        P.S. désolé pour l'indentation :-(

Suivre le flux des commentaires

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