78 private int v = ThreadLocalRandom.current().nextInt();
79 private volatile int result = 17;
80 private final ReentrantLock lock = new ReentrantLock();
81 private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer();
82 private final CyclicBarrier barrier;
83 private final int nthreads;
84 ReentrantLockLoop(int nthreads) {
85 this.nthreads = nthreads;
86 barrier = new CyclicBarrier(nthreads+1, timer);
87 }
88
89 final void test() throws Exception {
90 for (int i = 0; i < nthreads; ++i)
91 pool.execute(this);
92 barrier.await();
93 barrier.await();
94 if (print) {
95 long time = timer.getTime();
96 long tpi = time / ((long)iters * nthreads);
97 System.out.print("\t" + LoopHelpers.rightJustify(tpi) + " ns per lock");
98 double secs = (double)(time) / 1000000000.0;
99 System.out.println("\t " + secs + "s run time");
100 }
101
102 int r = result;
103 if (r == 0) // avoid overoptimization
104 System.out.println("useless result: " + r);
105 }
106
107 public final void run() {
108 try {
109 barrier.await();
110 int sum = v;
111 int x = 0;
112 int n = iters;
113 do {
114 lock.lock();
115 try {
116 if ((n & 255) == 0)
117 v = x = LoopHelpers.compute2(LoopHelpers.compute1(v));
118 else
|
78 private int v = ThreadLocalRandom.current().nextInt();
79 private volatile int result = 17;
80 private final ReentrantLock lock = new ReentrantLock();
81 private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer();
82 private final CyclicBarrier barrier;
83 private final int nthreads;
84 ReentrantLockLoop(int nthreads) {
85 this.nthreads = nthreads;
86 barrier = new CyclicBarrier(nthreads+1, timer);
87 }
88
89 final void test() throws Exception {
90 for (int i = 0; i < nthreads; ++i)
91 pool.execute(this);
92 barrier.await();
93 barrier.await();
94 if (print) {
95 long time = timer.getTime();
96 long tpi = time / ((long)iters * nthreads);
97 System.out.print("\t" + LoopHelpers.rightJustify(tpi) + " ns per lock");
98 double secs = (double)time / 1000000000.0;
99 System.out.println("\t " + secs + "s run time");
100 }
101
102 int r = result;
103 if (r == 0) // avoid overoptimization
104 System.out.println("useless result: " + r);
105 }
106
107 public final void run() {
108 try {
109 barrier.await();
110 int sum = v;
111 int x = 0;
112 int n = iters;
113 do {
114 lock.lock();
115 try {
116 if ((n & 255) == 0)
117 v = x = LoopHelpers.compute2(LoopHelpers.compute1(v));
118 else
|