[concurrency-interest] Enforcing ordered execution of critical sections?

Doug Lea dl at cs.oswego.edu
Wed Dec 24 10:05:37 EST 2014


On 12/13/2014 11:26 PM, Hanson Char wrote:
> I am looking for a construct that can be used to efficiently enforce
> ordered execution of multiple critical sections, each calling from a
> different thread. The calling threads may run in parallel and may call
> the execution method out of order.

Looking at this again while contemplating the need for
priority-based semaphores...

Have you considered creating a separate single-threaded
executor using a PriorityBlockingQueue? You'd need to
define a comparator for ordering, and then construct
via something like

Executor ex = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS,
  new PriorityBlockingQueue<Runnable>(initialCap, taskComparator)));

You'd then use this executor only for the execCriticalSection
tasks.

-Doug

>
> /**
>   * Used to enforce ordered execution of critical sections calling from multiple
>   * threads, parking and unparking the threads as necessary.
>   */
> public class OrderedExecutor<T> {
>      /**
>       * Executes a critical section at most once with the given order, parking
>       * and unparking the current thread as necessary so that all critical
>       * sections executed by different threads using this executor take place in
>       * the order from 1 to n consecutively.
>       */
>      public T execCriticalSectionInOrder(final int order,
>              final Callable<T> criticalSection) throws InterruptedException;
> }
>
> Regards,
> Hanson
> _______________________________________________
> Concurrency-interest mailing list
> Concurrency-interest at cs.oswego.edu
> http://cs.oswego.edu/mailman/listinfo/concurrency-interest
>



More information about the Concurrency-interest mailing list