public class BoundedBuffer { public BoundedBuffer(int size){ storage = new BBItem[cap = size]; full = new Semaphore(0); empty = new Semaphore(size); mutex = new Semaphore(1); i = j = 0; } public void put(BBItem itm){ empty.waitS(); mutex.waitS(); System.out.println("In buffer: " + itm); storage[i] = itm; i = (i + 1) % cap; mutex.signalS(); full.signalS(); } public BBItem get(){ full.waitS(); mutex.waitS(); BBItem res = storage[j]; j = (j + 1) % cap; System.out.println("Fatched from buffer: " + res); mutex.signalS(); empty.signalS(); return res; } protected Semaphore full, empty, mutex; protected BBItem[] storage; protected int cap, i, j; }