X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=TD1%2Fexo3%2FBufferCirc.java;fp=TD1%2Fexo3%2FBufferCirc.java;h=71204cc158c1680631d02c0714d338e90f9785a1;hb=396bc7433aa7fc3c404f2d175d1c93b82791cdde;hp=0000000000000000000000000000000000000000;hpb=b0f9b27c32d4599150eec0ce102695b328d87e7c;p=TD_SR.git diff --git a/TD1/exo3/BufferCirc.java b/TD1/exo3/BufferCirc.java new file mode 100644 index 0000000..71204cc --- /dev/null +++ b/TD1/exo3/BufferCirc.java @@ -0,0 +1,57 @@ + + +/** + * 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) { + if (!isFull()) { + nbObj++; + tampon[prem] = obj; + prem = (prem + 1) % taille; + System.out.println(Thread.currentThread().getName() + " a depose " + (Integer)obj); + } else { + System.out.println("Buffer plein pour " + Thread.currentThread().getName()); + } + } + + + public synchronized Object preleve() { + Object outObj = null; + if (isEmpty()) { + nbObj--; + outObj = tampon[der]; + der = (der + 1) % taille; + System.out.println(Thread.currentThread().getName() + " a preleve " + (Integer)outObj); + } else { + System.out.println("Buffer vide pour " + Thread.currentThread().getName()); + } + return outObj; + } + +} // fin class BufferCirc