X-Git-Url: https://git.piment-noir.org/?p=TD_SR.git;a=blobdiff_plain;f=TD1%2Fexo3%2FBufferCirc.java;h=45710851abd01031ba4f05516ddf75b86c1ffd5e;hp=ebfb2877016fdc978bf4e47b6d61ba9b9e2cb6c3;hb=18eb400ba6dc197a9be104038fa60055bcd83813;hpb=98a1366c704f3f1d6e757660c794a47ab076e280 diff --git a/TD1/exo3/BufferCirc.java b/TD1/exo3/BufferCirc.java index ebfb287..4571085 100644 --- a/TD1/exo3/BufferCirc.java +++ b/TD1/exo3/BufferCirc.java @@ -1,68 +1,68 @@ - - -/** - * implementation du producteur consommateur avec un buffer circulaire - */ -public class BufferCirc { - - private Object[] tampon; - private int taille; - private int prem, der, nbObj; - - - public BufferCirc (int t) { - taille = t; - tampon = new Object[taille]; - prem = 0; - der = 0; - nbObj = 0; - } - - - public boolean isEmpty() { - return nbObj == 0; - } - - - public boolean isFull() { - return nbObj == taille; - } - - - public synchronized void depose(Object obj) { - while(isFull()) { - try { - System.out.println("Buffer is full: " + Thread.currentThread().getName() - + " is waiting, size: " + nbObj); - - wait(); - } - catch (InterruptedException e) {} - } - nbObj++; - tampon[prem] = obj; - prem = (prem + 1) % taille; - //System.out.println(Thread.currentThread().getName() + " a depose " + (Integer)obj); - notifyAll(); - } - - - public synchronized Object preleve() { - while(isEmpty()) { - try { - System.out.println("Buffer is empty: " + Thread.currentThread().getName() - + " is waiting, size: " + nbObj); - wait(); - } - catch (InterruptedException e) {} - } - Object outObj = null; - nbObj--; - outObj = tampon[der]; - der = (der + 1) % taille; - //System.out.println(Thread.currentThread().getName() + " a preleve " + (Integer)outObj); - notifyAll(); - return outObj; - } - -} // fin class BufferCirc + + +/** + * implementation du producteur consommateur avec un buffer circulaire + */ +public class BufferCirc { + + private Object[] tampon; + private int taille; + private int prem, der, nbObj; + + + public BufferCirc (int t) { + taille = t; + tampon = new Object[taille]; + prem = 0; + der = 0; + nbObj = 0; + } + + + public boolean isEmpty() { + return nbObj == 0; + } + + + public boolean isFull() { + return nbObj == taille; + } + + + public synchronized void depose(Object obj) { + while(isFull()) { + try { + System.out.println("Buffer is full: " + Thread.currentThread().getName() + + " is waiting, size: " + nbObj); + + wait(); + } + catch (InterruptedException e) {} + } + nbObj++; + tampon[prem] = obj; + prem = (prem + 1) % taille; + //System.out.println(Thread.currentThread().getName() + " a depose " + (Integer)obj); + notifyAll(); + } + + + public synchronized Object preleve() { + while(isEmpty()) { + try { + System.out.println("Buffer is empty: " + Thread.currentThread().getName() + + " is waiting, size: " + nbObj); + wait(); + } + catch (InterruptedException e) {} + } + Object outObj = null; + nbObj--; + outObj = tampon[der]; + der = (der + 1) % taille; + //System.out.println(Thread.currentThread().getName() + " a preleve " + (Integer)outObj); + notifyAll(); + return outObj; + } + +} // fin class BufferCirc