blob: 247ede7a3cece9d95a34a5cc3187fb430884a415 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
package com.mbien.opencl;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
/**
*
* @author Michael Bien
*/
public class QueueBarrier {
private final CountDownLatch latch;
public QueueBarrier(int queueCount) {
this.latch = new CountDownLatch(queueCount);
}
/**
* Blocks the current Thread until the given events on the CLCommandQueue occurred.
* This method may be invoked concurrently without synchronization on the QueueBarrier object
* as long each Thread passes a distinct CLCommandQueue as parameter to this method.
*/
public QueueBarrier waitFor(CLCommandQueue queue, CLEventList events) {
queue.putWaitForEvents(events);
latch.countDown();
return this;
}
/**
* Blocks until all Threads which called {@link #waitFor}
* continue excecution.
* This method blocks only once, all subsequent calls are ignored.
*/
public QueueBarrier await() throws InterruptedException {
latch.await();
return this;
}
/**
* @see {@link #await()}
* @param timeout the maximum time to wait
* @param unit the time unit of the {@code timeout} argument
*/
public QueueBarrier await(long timeout, TimeUnit unit) throws InterruptedException {
latch.await(timeout, unit);
return this;
}
}
|