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.12 by jsr166, Wed Jun 8 20:01:45 2016 UTC vs.
Revision 1.14 by jsr166, Wed Jun 8 20:42:12 2016 UTC

# Line 137 | Line 137 | public final class LockLoops {
137                  System.out.print("StampedLockRead    ");
138              new StampedLockReadLoop().test(v, nthreads, iters);
139              Thread.sleep(10);
140 +
141 +            if (print)
142 +                System.out.print("StampedLockOptRead");
143 +            new StampedLockOptimisticReadLoop().test(v, nthreads, iters);
144 +            Thread.sleep(10);
145 +
146 +            if (print)
147 +                System.out.print("StampedLockReadWrite");
148 +            new StampedLockReadWriteLoop().test(v, nthreads, iters);
149 +            Thread.sleep(10);
150          }
151      }
152  
# Line 421 | Line 431 | public final class LockLoops {
431                  }
432                  sum += LoopHelpers.compute2(v);
433              }
434 +            return sum;
435 +        }
436 +    }
437 +
438 +    private static class StampedLockOptimisticReadLoop extends LockLoop {
439 +        private final StampedLock lock = new StampedLock();
440 +        final int loop(int n) {
441 +            int sum = 0;
442 +            while (n-- > 0) {
443 +                long stamp;
444 +                do {
445 +                    stamp = lock.tryOptimisticRead();
446 +                    v = LoopHelpers.compute1(v);
447 +                } while (!lock.validate(stamp));
448 +                sum += LoopHelpers.compute2(v);
449 +            }
450 +            return sum;
451 +        }
452 +    }
453 +
454 +    private static class StampedLockReadWriteLoop extends LockLoop {
455 +        private final StampedLock lock = new StampedLock();
456 +        final int loop(int n) {
457 +            int sum = 0;
458 +            while (n-- > 0) {
459 +                int x;
460 +                long stamp = lock.readLock();
461 +                try {
462 +                    x = LoopHelpers.compute1(v);
463 +                }
464 +                finally {
465 +                    lock.unlockRead(stamp);
466 +                }
467 +                stamp = lock.writeLock();
468 +                try {
469 +                    v = x;
470 +                } finally {
471 +                    lock.unlockWrite(stamp);
472 +                }
473 +                sum += LoopHelpers.compute2(v);
474 +            }
475              return sum;
476          }
477      }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines