ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/Mutex100M.java
Revision: 1.6
Committed: Thu Jan 15 18:34:19 2015 UTC (9 years, 4 months ago) by jsr166
Branch: MAIN
Changes since 1.5: +0 -1 lines
Log Message:
delete extraneous blank lines

File Contents

# User Rev Content
1 dl 1.2 /*
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 jsr166 1.5 * http://creativecommons.org/publicdomain/zero/1.0/
5 dl 1.2 */
6 dl 1.1
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 jsr166 1.4 int x = loop((int) System.nanoTime(), 100000);
14 dl 1.1 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 jsr166 1.4 double secs = (double) time / 1000000000.0;
21 dl 1.1 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 jsr166 1.4 secs = (double) time / 1000000000.0;
27 dl 1.1 System.out.println("time: " + secs);
28    
29     }
30    
31     static final Mutex100M.Mutex lock = new Mutex100M.Mutex();
32 jsr166 1.3
33 dl 1.1 static int loop(int x, int iters) {
34     final Mutex100M.Mutex l = lock;
35     for (int i = iters; i > 0; --i) {
36     l.lock();
37     x = x * 134775813 + 1;
38     l.unlock();
39     }
40     return x;
41     }
42    
43     static final class Mutex extends AbstractQueuedSynchronizer {
44     public boolean isHeldExclusively() { return getState() == 1; }
45 jsr166 1.3
46 dl 1.1 public boolean tryAcquire(int acquires) {
47     return getState() == 0 && compareAndSetState(0, 1);
48     }
49 jsr166 1.3
50 dl 1.1 public boolean tryRelease(int releases) {
51     setState(0);
52     return true;
53     }
54     public Condition newCondition() { return new ConditionObject(); }
55 jsr166 1.3
56     public void lock() {
57 dl 1.1 if (!compareAndSetState(0, 1))
58 jsr166 1.3 acquire(1);
59 dl 1.1 }
60 jsr166 1.3 public boolean tryLock() {
61 dl 1.1 return tryAcquire(1);
62     }
63 jsr166 1.3 public void lockInterruptibly() throws InterruptedException {
64 dl 1.1 acquireInterruptibly(1);
65     }
66     public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException {
67     return tryAcquireNanos(1, unit.toNanos(timeout));
68     }
69     public void unlock() { release(1); }
70     }
71 jsr166 1.3
72 dl 1.1 }