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