--- jsr166/src/test/loops/LockLoops.java 2015/08/10 03:13:33 1.11 +++ jsr166/src/test/loops/LockLoops.java 2016/06/08 20:01:45 1.12 @@ -18,6 +18,7 @@ public final class LockLoops { static boolean doBuiltin = true; static boolean doReadWrite = true; static boolean doSemaphore = true; + static boolean doStampedLock = true; static boolean doFair = true; public static void main(String[] args) throws Exception { @@ -125,6 +126,18 @@ public final class LockLoops { Thread.sleep(10); } } + + if (doStampedLock) { + if (print) + System.out.print("StampedLockWrite "); + new StampedLockWriteLoop().test(v, nthreads, iters); + Thread.sleep(10); + + if (print) + System.out.print("StampedLockRead "); + new StampedLockReadLoop().test(v, nthreads, iters); + Thread.sleep(10); + } } abstract static class LockLoop implements Runnable { @@ -326,6 +339,7 @@ public final class LockLoops { return sum; } } + private static class FairSemaphoreLoop extends LockLoop { private final Semaphore sem = new Semaphore(1, true); final int loop(int n) { @@ -371,6 +385,42 @@ public final class LockLoops { } sum += LoopHelpers.compute2(v); } + return sum; + } + } + + private static class StampedLockWriteLoop extends LockLoop { + private final StampedLock lock = new StampedLock(); + final int loop(int n) { + int sum = 0; + while (n-- > 0) { + long stamp = lock.writeLock(); + try { + v = LoopHelpers.compute1(v); + } + finally { + lock.unlockWrite(stamp); + } + sum += LoopHelpers.compute2(v); + } + return sum; + } + } + + private static class StampedLockReadLoop extends LockLoop { + private final StampedLock lock = new StampedLock(); + final int loop(int n) { + int sum = 0; + while (n-- > 0) { + long stamp = lock.readLock(); + try { + v = LoopHelpers.compute1(v); + } + finally { + lock.unlockRead(stamp); + } + sum += LoopHelpers.compute2(v); + } return sum; } }