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 :
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();
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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();
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.
Partager