ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/Mutex100M.java
Revision: 1.3
Committed: Thu Oct 29 23:09:07 2009 UTC (14 years, 6 months ago) by jsr166
Branch: MAIN
Changes since 1.2: +9 -9 lines
Log Message:
whitespace

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     * http://creativecommons.org/licenses/publicdomain
5     */
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     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    
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    
44     static final class Mutex extends AbstractQueuedSynchronizer {
45     public boolean isHeldExclusively() { return getState() == 1; }
46 jsr166 1.3
47 dl 1.1 public boolean tryAcquire(int acquires) {
48     return getState() == 0 && compareAndSetState(0, 1);
49     }
50 jsr166 1.3
51 dl 1.1 public boolean tryRelease(int releases) {
52     setState(0);
53     return true;
54     }
55     public Condition newCondition() { return new ConditionObject(); }
56 jsr166 1.3
57     public void lock() {
58 dl 1.1 if (!compareAndSetState(0, 1))
59 jsr166 1.3 acquire(1);
60 dl 1.1 }
61 jsr166 1.3 public boolean tryLock() {
62 dl 1.1 return tryAcquire(1);
63     }
64 jsr166 1.3 public void lockInterruptibly() throws InterruptedException {
65 dl 1.1 acquireInterruptibly(1);
66     }
67     public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException {
68     return tryAcquireNanos(1, unit.toNanos(timeout));
69     }
70     public void unlock() { release(1); }
71     }
72 jsr166 1.3
73 dl 1.1 }