ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/LockLoops.java
(Generate patch)

Comparing jsr166/src/test/loops/LockLoops.java (file contents):
Revision 1.11 by jsr166, Mon Aug 10 03:13:33 2015 UTC vs.
Revision 1.13 by jsr166, Wed Jun 8 20:11:01 2016 UTC

# Line 18 | Line 18 | public final class LockLoops {
18      static boolean doBuiltin = true;
19      static boolean doReadWrite = true;
20      static boolean doSemaphore = true;
21 +    static boolean doStampedLock = true;
22      static boolean doFair = true;
23  
24      public static void main(String[] args) throws Exception {
# Line 125 | Line 126 | public final class LockLoops {
126                  Thread.sleep(10);
127              }
128          }
129 +
130 +        if (doStampedLock) {
131 +            if (print)
132 +                System.out.print("StampedLockWrite   ");
133 +            new StampedLockWriteLoop().test(v, nthreads, iters);
134 +            Thread.sleep(10);
135 +
136 +            if (print)
137 +                System.out.print("StampedLockRead    ");
138 +            new StampedLockReadLoop().test(v, nthreads, iters);
139 +            Thread.sleep(10);
140 +
141 +            if (print)
142 +                System.out.print("StampedLockReadWrite");
143 +            new StampedLockReadLoop().test(v, nthreads, iters);
144 +            Thread.sleep(10);
145 +        }
146      }
147  
148      abstract static class LockLoop implements Runnable {
# Line 326 | Line 344 | public final class LockLoops {
344              return sum;
345          }
346      }
347 +
348      private static class FairSemaphoreLoop extends LockLoop {
349          private final Semaphore sem = new Semaphore(1, true);
350          final int loop(int n) {
# Line 371 | Line 390 | public final class LockLoops {
390                  }
391                  sum += LoopHelpers.compute2(v);
392              }
393 +            return sum;
394 +        }
395 +    }
396 +
397 +    private static class StampedLockWriteLoop extends LockLoop {
398 +        private final StampedLock lock = new StampedLock();
399 +        final int loop(int n) {
400 +            int sum = 0;
401 +            while (n-- > 0) {
402 +                long stamp = lock.writeLock();
403 +                try {
404 +                    v = LoopHelpers.compute1(v);
405 +                }
406 +                finally {
407 +                    lock.unlockWrite(stamp);
408 +                }
409 +                sum += LoopHelpers.compute2(v);
410 +            }
411 +            return sum;
412 +        }
413 +    }
414 +
415 +    private static class StampedLockReadLoop extends LockLoop {
416 +        private final StampedLock lock = new StampedLock();
417 +        final int loop(int n) {
418 +            int sum = 0;
419 +            while (n-- > 0) {
420 +                long stamp = lock.readLock();
421 +                try {
422 +                    v = LoopHelpers.compute1(v);
423 +                }
424 +                finally {
425 +                    lock.unlockRead(stamp);
426 +                }
427 +                sum += LoopHelpers.compute2(v);
428 +            }
429 +            return sum;
430 +        }
431 +    }
432 +
433 +    private static class StampedLockReadWriteLoop extends LockLoop {
434 +        private final StampedLock lock = new StampedLock();
435 +        final int loop(int n) {
436 +            int sum = 0;
437 +            while (n-- > 0) {
438 +                int x;
439 +                long stamp = lock.readLock();
440 +                try {
441 +                    x = LoopHelpers.compute1(v);
442 +                }
443 +                finally {
444 +                    lock.unlockRead(stamp);
445 +                }
446 +                stamp = lock.writeLock();
447 +                try {
448 +                    v = x;
449 +                } finally {
450 +                    lock.unlockWrite(stamp);
451 +                }
452 +                sum += LoopHelpers.compute2(v);
453 +            }
454              return sum;
455          }
456      }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines