algo atomic

This commit is contained in:
trochas
2025-11-10 11:28:02 +01:00
parent f62778819d
commit a0545c6fbc
4 changed files with 18 additions and 10 deletions

View File

@@ -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<ObserverDeCapteurAsync> observers=new ArrayList<ObserverDeCapteurAsync>();
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();
}

View File

@@ -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
}

View File

@@ -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);
}

View File

@@ -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);