com.jogamp.opencl.util
Class MultiQueueBarrier

java.lang.Object
  extended by com.jogamp.opencl.util.MultiQueueBarrier

public class MultiQueueBarrier
extends Object

An utility for synchronizing multiple concurrent CLCommandQueues. This Barrier can be reused after it has been broken.

Author:
Michael Bien

Constructor Summary
MultiQueueBarrier(CLCommandQueue... allowedQueues)
          Creates a new MultiQueueBarrier for the given queues.
MultiQueueBarrier(int queueCount)
          Creates a new MultiQueueBarrier with the given queueCount.
 
Method Summary
 MultiQueueBarrier await()
          Blocks until all Threads which called waitFor(com.jogamp.opencl.CLCommandQueue) continue execution.
 boolean await(long timeout, TimeUnit unit)
           
 long getCount()
          Returns the current number of events which must occure before this barrier unblocks the waiting threads.
 void resetBarrier()
          Resets this barrier and unblocks all waiting threads.
 MultiQueueBarrier waitFor(CLCommandQueue queue)
          Blocks the current Thread until all commands on the CLCommandQueue finished excecution.
 MultiQueueBarrier waitFor(CLCommandQueue queue, CLEventList events)
          Blocks the current Thread until the given events on the CLCommandQueue occurred.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

MultiQueueBarrier

public MultiQueueBarrier(int queueCount)
Creates a new MultiQueueBarrier with the given queueCount. It is recommented to use MultiQueueBarrier(CLCommandQueue... allowedQueues) if possible which restricts the set of allowed queues for the barrier.


MultiQueueBarrier

public MultiQueueBarrier(CLCommandQueue... allowedQueues)
Creates a new MultiQueueBarrier for the given queues.

Method Detail

waitFor

public MultiQueueBarrier waitFor(CLCommandQueue queue)
Blocks the current Thread until all commands on the CLCommandQueue finished excecution. This method may be invoked concurrently without synchronization on the MultiQueueBarrier object as long each Thread passes a distinct CLCommandQueue as parameter to this method.


waitFor

public MultiQueueBarrier waitFor(CLCommandQueue queue,
                                 CLEventList events)
Blocks the current Thread until the given events on the CLCommandQueue occurred. This method may be invoked concurrently without synchronization on the MultiQueueBarrier object as long each Thread passes a distinct CLCommandQueue as parameter to this method.


await

public MultiQueueBarrier await()
                        throws InterruptedException
Blocks until all Threads which called waitFor(com.jogamp.opencl.CLCommandQueue) continue execution. This method blocks only once, all subsequent calls are ignored.

Throws:
InterruptedException

await

public boolean await(long timeout,
                     TimeUnit unit)
              throws InterruptedException
Parameters:
timeout - the maximum time to wait
unit - the time unit of the timeout argument
Throws:
InterruptedException
See Also:
await()

resetBarrier

public void resetBarrier()
Resets this barrier and unblocks all waiting threads.


getCount

public long getCount()
Returns the current number of events which must occure before this barrier unblocks the waiting threads. This method is typically used for debugging and testing purposes.