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.13 by jsr166, Wed Jun 8 20:11:01 2016 UTC vs.
Revision 1.15 by jsr166, Thu Jun 9 15:28:19 2016 UTC

# Line 3 | Line 3
3   * Expert Group and released to the public domain, as explained at
4   * http://creativecommons.org/publicdomain/zero/1.0/
5   */
6 +
7   /*
8 < * A simple test program. Feel free to play.
8 > * Simple benchmark comparing various locking techniques.
9   */
10  
11   import java.util.*;
# Line 91 | Line 92 | public final class LockLoops {
92              Thread.sleep(10);
93  
94              if (print)
95 +                System.out.print("ReentrantReadLock    ");
96 +            new ReentrantReadLockLoop().test(v, nthreads, iters);
97 +            Thread.sleep(10);
98 +
99 +            if (print)
100                  System.out.print("ReentrantReadWriteLock");
101              new ReentrantReadWriteLockLoop().test(v, nthreads, iters);
102              Thread.sleep(10);
# Line 139 | Line 145 | public final class LockLoops {
145              Thread.sleep(10);
146  
147              if (print)
148 +                System.out.print("StampedLockOptRead");
149 +            new StampedLockOptimisticReadLoop().test(v, nthreads, iters);
150 +            Thread.sleep(10);
151 +
152 +            if (print)
153                  System.out.print("StampedLockReadWrite");
154 <            new StampedLockReadLoop().test(v, nthreads, iters);
154 >            new StampedLockReadWriteLoop().test(v, nthreads, iters);
155              Thread.sleep(10);
156          }
157      }
# Line 278 | Line 289 | public final class LockLoops {
289          }
290      }
291  
292 +    private static class ReentrantReadLockLoop extends LockLoop {
293 +        private final Lock lock = new ReentrantReadWriteLock().readLock();
294 +        final int loop(int n) {
295 +            int sum = 0;
296 +            while (n-- > 0) {
297 +                lock.lock();
298 +                try {
299 +                    v = LoopHelpers.compute1(v);
300 +                }
301 +                finally {
302 +                    lock.unlock();
303 +                }
304 +                sum += LoopHelpers.compute2(v);
305 +            }
306 +            return sum;
307 +        }
308 +    }
309 +
310      private static class ReentrantReadWriteLockLoop extends LockLoop {
311          private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
312          final int loop(int n) {
# Line 427 | Line 456 | public final class LockLoops {
456                  sum += LoopHelpers.compute2(v);
457              }
458              return sum;
459 +        }
460 +    }
461 +
462 +    private static class StampedLockOptimisticReadLoop extends LockLoop {
463 +        private final StampedLock lock = new StampedLock();
464 +        final int loop(int n) {
465 +            int sum = 0;
466 +            while (n-- > 0) {
467 +                long stamp;
468 +                do {
469 +                    stamp = lock.tryOptimisticRead();
470 +                    v = LoopHelpers.compute1(v);
471 +                } while (!lock.validate(stamp));
472 +                sum += LoopHelpers.compute2(v);
473 +            }
474 +            return sum;
475          }
476      }
477  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines