algo atomic
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user