ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/Mutex100M.java
Revision: 1.7
Committed: Mon Aug 10 03:13:33 2015 UTC (8 years, 8 months ago) by jsr166
Branch: MAIN
CVS Tags: HEAD
Changes since 1.6: +0 -1 lines
Log Message:
delete unwanted blank lines

File Contents

# Content
1 /*
2 * Written by Doug Lea with assistance from members of JCP JSR-166
3 * Expert Group and released to the public domain, as explained at
4 * http://creativecommons.org/publicdomain/zero/1.0/
5 */
6
7 import java.util.concurrent.*;
8 import java.util.concurrent.atomic.*;
9 import java.util.concurrent.locks.*;
10
11 class Mutex100M {
12 public static void main(String[] args) throws Exception {
13 int x = loop((int) System.nanoTime(), 100000);
14 x = loop(x, 100000);
15 x = loop(x, 100000);
16 long start = System.nanoTime();
17 x = loop(x, 100000000);
18 if (x == 0) System.out.print(" ");
19 long time = System.nanoTime() - start;
20 double secs = (double) time / 1000000000.0;
21 System.out.println("time: " + secs);
22 start = System.nanoTime();
23 x = loop(x, 100000000);
24 if (x == 0) System.out.print(" ");
25 time = System.nanoTime() - start;
26 secs = (double) time / 1000000000.0;
27 System.out.println("time: " + secs);
28 }
29
30 static final Mutex100M.Mutex lock = new Mutex100M.Mutex();
31
32 static int loop(int x, int iters) {
33 final Mutex100M.Mutex l = lock;
34 for (int i = iters; i > 0; --i) {
35 l.lock();
36 x = x * 134775813 + 1;
37 l.unlock();
38 }
39 return x;
40 }
41
42 static final class Mutex extends AbstractQueuedSynchronizer {
43 public boolean isHeldExclusively() { return getState() == 1; }
44
45 public boolean tryAcquire(int acquires) {
46 return getState() == 0 && compareAndSetState(0, 1);
47 }
48
49 public boolean tryRelease(int releases) {
50 setState(0);
51 return true;
52 }
53 public Condition newCondition() { return new ConditionObject(); }
54
55 public void lock() {
56 if (!compareAndSetState(0, 1))
57 acquire(1);
58 }
59 public boolean tryLock() {
60 return tryAcquire(1);
61 }
62 public void lockInterruptibly() throws InterruptedException {
63 acquireInterruptibly(1);
64 }
65 public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException {
66 return tryAcquireNanos(1, unit.toNanos(timeout));
67 }
68 public void unlock() { release(1); }
69 }
70
71 }