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 snt . Évalué à 2.
# synchronized
Posté par Alex G. . Évalué à 4.
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 Antoine Reilles (site web personnel) . Évalué à 1.
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 EraZerg . Évalué à 2.
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 gc (site web personnel) . Évalué à 1.
c'est un troll consensuel au moins.
[^] # Optimisations : essaye avec synchronize(Object o)
Posté par Xavier FACQ . Évalué à 2.
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 à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.