Concurrency

This library provides various concurrency utilities for use with Dylan programs.

Basic Abstractions

The abstractions in this library are somewhat inspired by javax.concurrency.

Executors

Executors perform work that is requested from them asynchronously.

Currently, all executors use their own private threads.

See: <executor>, <fixed-thread-executor>, <thread-executor>, and <single-thread-executor>.

Queues

Queues are job-streams that can have items enqueued and subsequently dequeued.

These form the synchronization mechanism for thread executors.

See: <queue>, <locked-queue>.

Work

Work objects represent something to be done.

See: <work>, <locked-work>.

Library Reference

Executors

<executor> Abstract Class
Superclasses:

<object>

Init-Keywords:
  • name
Operations:

<thread-executor> Abstract Class
Superclasses:

<executor>

Init-Keywords:
  • queue
Operations:

<fixed-thread-executor> Class
Superclasses:

<thread-executor>

Init-Keywords:
  • thread-count
<single-thread-executor> Class
Superclasses:<thread-executor>
executor-name Generic function
Signature:

executor-name (executor) => (name)

Parameters:
Values:
executor-request Generic function

Request that this executor do some work.

Signature:

executor-request (executor work) => ()

Parameters:
executor-request(<function>) Method

A convenience method that converts the given function into a <work> object. The function must not have any required arguments.

Signature:

executor-request (executor function) => ()

Parameters:
executor-request(<work>) Method
Signature:

executor-request (executor work) => ()

Parameters:
executor-shutdown Generic function
Signature:

executor-shutdown (executor #key join? drain?) => ()

Parameters:

Queues

<queue> Abstract Class
Superclasses:

<object>

Init-Keywords:
  • name
Discussion:

This is a base class for specific implementations that modify queueing behaviour.

Operations:

<locked-queue> Class

Locked multi-reader multi-writer queue

Superclasses:<queue>
Discussion:Locked multi-reader multi-writer queue

A notification is used for synchronization. The associated lock is used for all queue state.

Locked queues can be STOPPED so that no further work will be accepted and processing will end once all previously submitted work has been finished.

After stopping, all further enqueue operations will signal <queue-stopped>.

Dequeue operations will continue until the queue has been drained, whereupon they will also be signalled.

Locked queues can be INTERRUPTED so that no further work will be accepted or begun. Work that has already been started will continue.

Interrupting implies stopping, so enqueue operations will be signalled <queue-stopped>.

Dequeue operations will signal <queue-interrupt>.

Operations:
dequeue Generic function

Dequeue the next available item from the queue.

Signature:

dequeue (queue) => (object)

Parameters:
  • queue – An instance of <queue>.
Values:
Discussion:

Dequeue the next available item from the queue.

May signal <queue-interrupt> or <queue-stopped> when the queue has reached the respective state.

enqueue Generic function

Enqueue a work item onto the queue.

Signature:

enqueue (queue object) => ()

Parameters:
Discussion:

Enqueue a work item onto the queue.

May signal <queue-stopped> when the queue no longer accepts work.

queue-name Generic function

Returns the name of the queue.

Signature:

queue-name (queue) => (name?)

Parameters:
  • queue – An instance of <queue>.
Values:
  • name? – An instance of false-or(<string>).
interrupt-queue Generic function

Interrupts the queue, abandoning submitted work.

Signature:

interrupt-queue (queue) => ()

Parameters:
Discussion:

Interrupts the queue, abandoning submitted work.

Submitters will be signalled <queue-stopped> in enqueue if they try to submit further work.

Receivers will be signalled <queue-interrupt> at the first dequeue operation they perform.

stop-queue Generic function

Stops the queue so that submitted work can still continue.

Signature:

stop-queue (queue) => ()

Parameters:
Discussion:

Stops the queue so that submitted work can still continue.

Submitters will be signalled <queue-stopped> in enqueue if they try to submit further work.

Receivers will be signalled <queue-stopped> in dequeue once the queue has been drained.

<queue-condition> Abstract Class

Conditions related to <locked-queue> operations.

Superclasses:

<condition>

Init-Keywords:
  • queue
  • thread
<queue-interrupt> Class

Signalled when the queue has been interrupted.

Superclasses:<queue-condition>
<queue-stopped> Class

Signalled when the queue has been stopped.

Superclasses:<queue-condition>
queue-condition-queue Generic function
Signature:

queue-condition-queue (condition) => (queue)

Parameters:
Values:
  • queue – An instance of <queue>.
queue-condition-thread Generic function
Signature:

queue-condition-thread (condition) => (thread)

Parameters:
Values:

Work

<work> Class
Superclasses:

<object>

Init-Keywords:
  • function – A function to perform some work. The function must not have any required arguments.
Operations:

<locked-work> Class
Superclasses:<work>
Operations:
work-finished? Generic function
Signature:

work-finished? (work) => (finished?)

Parameters:
  • work – An instance of <work>.
Values:
work-perform Generic function
Signature:

work-perform (work) => ()

Parameters:
  • work – An instance of <work>.
work-started? Generic function
Signature:

work-started? (work) => (started?)

Parameters:
  • work – An instance of <work>.
Values:
work-thread Generic function

Return the thread on which the work was executed.

Signature:

work-thread (work) => (thread)

Parameters:
  • work – An instance of <work>.
Values:
  • thread – An instance of <thread>.
work-wait Generic function

Wait for a work item to reach the given state. Valid states are $work-started and $work-finished.

Signature:

work-wait (work state) => ()

Parameters:
$work-started Constant

Used with work-wait to indicate that you want to wait until work has started executing.

Type:<work-state>

See also: $work-finished

$work-finished Constant

Used with work-wait to indicate that you want to wait until work has finished executing.

Type:<work-state>

See also: $work-finished