ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/Mutex100M.java
Revision: 1.2
Committed: Mon May 9 19:33:30 2005 UTC (19 years ago) by dl
Branch: MAIN
Changes since 1.1: +5 -0 lines
Log Message:
Add headers

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    
33     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    
47     public boolean tryAcquire(int acquires) {
48     return getState() == 0 && compareAndSetState(0, 1);
49     }
50    
51     public boolean tryRelease(int releases) {
52     setState(0);
53     return true;
54     }
55     public Condition newCondition() { return new ConditionObject(); }
56    
57     public void lock() {
58     if (!compareAndSetState(0, 1))
59     acquire(1);
60     }
61     public boolean tryLock() {
62     return tryAcquire(1);
63     }
64     public void lockInterruptibly() throws InterruptedException {
65     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    
73     }