jtulach@111: package org.apidesign.reentrant; jtulach@111: jtulach@111: import java.util.Collection; jtulach@111: import java.util.concurrent.atomic.AtomicInteger; jtulach@111: jtulach@111: public class CriticalSectionReentrant> implements CriticalSection { jtulach@111: private T pilot; jtulach@111: jtulach@111: public void assignPilot(T pilot) { jtulach@111: this.pilot = pilot; jtulach@111: } jtulach@111: jtulach@115: // BEGIN: reentrant.merge.int jtulach@210: private AtomicInteger cnt = new AtomicInteger(); jtulach@111: public int sumBigger(Collection args) { jtulach@111: T pilotCopy = this.pilot; jtulach@112: int own = doCriticalSection(args, pilotCopy); jtulach@112: // now merge with global state jtulach@112: cnt.addAndGet(own); jtulach@112: return own; jtulach@112: } jtulach@115: // END: reentrant.merge.int jtulach@112: jtulach@112: private int doCriticalSection(Collection args, T pilotCopy) { jtulach@111: int own = 0; jtulach@111: for (T cmp : args) { jtulach@111: if (pilotCopy.compareTo(cmp) < 0) { jtulach@111: own++; jtulach@111: } jtulach@111: } jtulach@111: return own; jtulach@111: } jtulach@111: jtulach@111: public int getCount() { jtulach@111: return cnt.get(); jtulach@111: } jtulach@111: }