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, 9 months ago) by jsr166
Branch: MAIN
CVS Tags: HEAD
Changes since 1.6: +0 -1 lines
Log Message:
delete unwanted 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     static final Mutex100M.Mutex lock = new Mutex100M.Mutex();
31 jsr166 1.3
32 dl 1.1 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 jsr166 1.3
45 dl 1.1 public boolean tryAcquire(int acquires) {
46     return getState() == 0 && compareAndSetState(0, 1);
47     }
48 jsr166 1.3
49 dl 1.1 public boolean tryRelease(int releases) {
50     setState(0);
51     return true;
52     }
53     public Condition newCondition() { return new ConditionObject(); }
54 jsr166 1.3
55     public void lock() {
56 dl 1.1 if (!compareAndSetState(0, 1))
57 jsr166 1.3 acquire(1);
58 dl 1.1 }
59 jsr166 1.3 public boolean tryLock() {
60 dl 1.1 return tryAcquire(1);
61     }
62 jsr166 1.3 public void lockInterruptibly() throws InterruptedException {
63 dl 1.1 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 jsr166 1.3
71 dl 1.1 }