From a0545c6fbcae9c334a23683565da21f581d2f915 Mon Sep 17 00:00:00 2001 From: trochas Date: Mon, 10 Nov 2025 11:28:02 +0100 Subject: [PATCH] algo atomic --- src/impl/CapteurImpl.java | 8 +++----- src/impl/DiffusionAtomique.java | 15 ++++++++++++++- src/impl/Scheduler.java | 2 +- src/main.java | 3 --- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/impl/CapteurImpl.java b/src/impl/CapteurImpl.java index 7f259d9..0a851f8 100644 --- a/src/impl/CapteurImpl.java +++ b/src/impl/CapteurImpl.java @@ -4,16 +4,14 @@ import interfaces.AlgoDiffusion; import interfaces.Capteur; import interfaces.ObserverDeCapteurAsync; -import java.time.Clock; import java.util.ArrayList; import java.util.List; public class CapteurImpl implements Capteur { - private int value; + private int value = 0; private AlgoDiffusion diffusion; protected List observers=new ArrayList(); private Boolean locker = false; - public int initTime = 0; @Override public void attach(ObserverDeCapteurAsync o) { @@ -27,8 +25,8 @@ public class CapteurImpl implements Capteur { @Override public void tick() { - Clock clockTime = Clock.systemDefaultZone(); - this.value = ((int)clockTime.millis())-initTime; + System.out.println("\t\ttick"); + this.value++; if(!locker){ diffusion.execute(); } diff --git a/src/impl/DiffusionAtomique.java b/src/impl/DiffusionAtomique.java index 7970dda..988c437 100644 --- a/src/impl/DiffusionAtomique.java +++ b/src/impl/DiffusionAtomique.java @@ -2,6 +2,8 @@ package impl; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; import interfaces.AlgoDiffusion; import interfaces.Capteur; @@ -20,8 +22,19 @@ public class DiffusionAtomique implements AlgoDiffusion { @Override public void execute() { capteur.lock(); + Future[] l = new Future[capteur.observers.size()]; + int i = 0; for (ObserverDeCapteurAsync canal : capteur.observers) { - canal.update(); + Future f = canal.update(); + l[i] = f; + i++; + } + for (Future f : l) { + try { + f.get(); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } } capteur.unlock(); //TODO } diff --git a/src/impl/Scheduler.java b/src/impl/Scheduler.java index b2ee01d..d32653a 100644 --- a/src/impl/Scheduler.java +++ b/src/impl/Scheduler.java @@ -6,7 +6,7 @@ public class Scheduler { private final ScheduledExecutorService scheduler; public Scheduler(int nbCanaux) { - int nThread = 20+2*nbCanaux; + int nThread = 2+2*nbCanaux; scheduler = Executors.newScheduledThreadPool(nThread); } diff --git a/src/main.java b/src/main.java index 31fb63f..fae6193 100644 --- a/src/main.java +++ b/src/main.java @@ -9,7 +9,6 @@ import impl.CapteurImpl; import impl.DiffusionAtomique; import impl.Scheduler; import interfaces.AlgoDiffusion; -import java.time.*; public class main { @@ -20,8 +19,6 @@ public class main { Scheduler scheduler = new Scheduler(NB_CANAUX); CapteurImpl c = new CapteurImpl(); - Clock clockTime = Clock.systemDefaultZone(); - c.initTime = ((int)clockTime.millis()); DiffusionAtomique algo = new DiffusionAtomique(); algo.capteur = c; c.setAlgoDiffusion(algo);