Probleme avec Les lock et les condition
Bonjour
j'ai le code suivant que je voulais utiliser pour produire une chose proche du l'algorithme du rendez-vous, on utilisant un lock et sa condition le code est le suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
...
Lock veroux4 = new ReentrantLock();
Condition tousIci = veroux4.newCondition();
...
veroux4.lock();
nombre++;
if(nombre==5){
System.out.println("Le processus n° "+num+" débloque les autres processus.");
tousIci.signalAll();
}
else{
try {
System.out.println("Le processus n° " + num + " attend les autre processus.");
tousIci.await();
System.out.println("Le processus n° " + num + " est débloquer.");
} catch (InterruptedException ex) {
Logger.getLogger(MathThread.class.getName()).log(Level.SEVERE, null, ex);
}
}
veroux4.unlock(); |
les 4 premiers threads seront bloquer mais les 5 quant il passe et il exécute tousIci.signalAll(), ces thread là ne sont pas réveillés, alors qui le seule thread qui passe est ce-lui qui a exécute tousIci.signalAll(), et n'a pas exécuté tousIci.await();
je sais que les barrières cycliques seront plus performantes, mais je veux surtout savoir la raison de ce dis-fonctionnement.
Merci pour votre aide.