equal
deleted
inserted
replaced
38 * Checks for responsiveness of locks to interrupts. |
38 * Checks for responsiveness of locks to interrupts. |
39 */ |
39 */ |
40 |
40 |
41 import static java.util.concurrent.TimeUnit.NANOSECONDS; |
41 import static java.util.concurrent.TimeUnit.NANOSECONDS; |
42 |
42 |
43 import java.util.SplittableRandom; |
|
44 import java.util.concurrent.CyclicBarrier; |
43 import java.util.concurrent.CyclicBarrier; |
|
44 import java.util.concurrent.ThreadLocalRandom; |
45 import java.util.concurrent.locks.ReentrantLock; |
45 import java.util.concurrent.locks.ReentrantLock; |
46 |
46 |
47 public final class CancelledLockLoops { |
47 public final class CancelledLockLoops { |
48 static final SplittableRandom rnd = new SplittableRandom(); |
|
49 |
|
50 public static void main(String[] args) throws Exception { |
48 public static void main(String[] args) throws Exception { |
51 final int maxThreads = (args.length > 0) ? Integer.parseInt(args[0]) : 5; |
49 final int maxThreads = (args.length > 0) ? Integer.parseInt(args[0]) : 5; |
52 final int reps = 1; // increase for stress testing |
50 final int reps = 1; // increase for stress testing |
53 |
51 |
54 for (int j = 0; j < reps; j++) { |
52 for (int j = 0; j < reps; j++) { |
59 } |
57 } |
60 |
58 |
61 static final class Loops implements Runnable { |
59 static final class Loops implements Runnable { |
62 private final boolean print = false; |
60 private final boolean print = false; |
63 private volatile boolean done = false; |
61 private volatile boolean done = false; |
64 private int v = rnd.nextInt(); |
62 private int v = ThreadLocalRandom.current().nextInt(); |
65 private int completed = 0; |
63 private int completed = 0; |
66 private volatile int result = 17; |
64 private volatile int result = 17; |
67 private final ReentrantLock lock = new ReentrantLock(); |
65 private final ReentrantLock lock = new ReentrantLock(); |
68 private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); |
66 private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); |
69 private final CyclicBarrier barrier; |
67 private final CyclicBarrier barrier; |
74 if (print) System.out.print("Threads: " + nthreads); |
72 if (print) System.out.print("Threads: " + nthreads); |
75 barrier = new CyclicBarrier(nthreads+1, timer); |
73 barrier = new CyclicBarrier(nthreads+1, timer); |
76 } |
74 } |
77 |
75 |
78 final void test() throws Exception { |
76 final void test() throws Exception { |
|
77 final ThreadLocalRandom rnd = ThreadLocalRandom.current(); |
79 Thread[] threads = new Thread[nthreads]; |
78 Thread[] threads = new Thread[nthreads]; |
80 for (int i = 0; i < threads.length; ++i) |
79 for (int i = 0; i < threads.length; ++i) |
81 threads[i] = new Thread(this); |
80 threads[i] = new Thread(this); |
82 for (int i = 0; i < threads.length; ++i) |
81 for (int i = 0; i < threads.length; ++i) |
83 threads[i].start(); |
82 threads[i].start(); |