X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=TD1%2Fexo3%2FBufferCirc.java;h=ebfb2877016fdc978bf4e47b6d61ba9b9e2cb6c3;hb=7bd74736638acf238b5bcb2ae51e05519ad116ae;hp=71204cc158c1680631d02c0714d338e90f9785a1;hpb=396bc7433aa7fc3c404f2d175d1c93b82791cdde;p=TD_SR.git diff --git a/TD1/exo3/BufferCirc.java b/TD1/exo3/BufferCirc.java index 71204cc..ebfb287 100644 --- a/TD1/exo3/BufferCirc.java +++ b/TD1/exo3/BufferCirc.java @@ -30,27 +30,38 @@ public class BufferCirc { 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()); + 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() { - 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()); + 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; }