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>
.
Library Reference¶
Executors¶
-
<executor>
Abstract Class¶ - Superclasses
- Init-Keywords
name –
- Operations
-
<thread-executor>
Abstract Class¶ - Superclasses
- Init-Keywords
queue –
- Operations
-
<fixed-thread-executor>
Class¶ - Superclasses
- Init-Keywords
thread-count –
-
<single-thread-executor>
Class¶ - Superclasses
-
executor-name
Generic function¶ - Signature
executor-name (executor) => (name)
- Parameters
executor – An instance of
<executor>
.
- Values
name – An instance of
<string>
.
-
executor-request
Generic function¶ Request that this executor do some work.
- Signature
executor-request (executor work) => ()
- Parameters
executor – An instance of
<executor>
.work – An instance of
<object>
.
-
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 – An instance of
<executor>
.work – An instance of
<function>
.
-
executor-request(<work>)
Method¶ - Signature
executor-request (executor work) => ()
- Parameters
executor – An instance of
<executor>
.work – An instance of
<work>
.
-
executor-shutdown
Generic function¶ - Signature
executor-shutdown (executor #key join? drain?) => ()
- Parameters
executor – An instance of
<thread-executor>
.join? (#key) – An instance of
<boolean>
.drain? (#key) – An instance of
<boolean>
.
Queues¶
-
<queue>
Abstract Class¶ - Superclasses
- 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
- 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
object – An instance of
<object>
.
- 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
queue – An instance of
<locked-queue>
.
- Discussion
Interrupts the queue, abandoning submitted work.
Submitters will be signalled
<queue-stopped>
inenqueue
if they try to submit further work.Receivers will be signalled
<queue-interrupt>
at the firstdequeue
operation they perform.
-
stop-queue
Generic function¶ Stops the queue so that submitted work can still continue.
- Signature
stop-queue (queue) => ()
- Parameters
queue – An instance of
<locked-queue>
.
- Discussion
Stops the queue so that submitted work can still continue.
Submitters will be signalled
<queue-stopped>
inenqueue
if they try to submit further work.Receivers will be signalled
<queue-stopped>
indequeue
once the queue has been drained.
-
<queue-condition>
Abstract Class¶ Conditions related to <locked-queue> operations.
- Superclasses
- Init-Keywords
queue –
thread –
-
<queue-interrupt>
Class¶ Signalled when the queue has been interrupted.
- Superclasses
-
<queue-stopped>
Class¶ Signalled when the queue has been stopped.
- Superclasses
-
queue-condition-queue
Generic function¶ - Signature
queue-condition-queue (condition) => (queue)
- Parameters
condition – An instance of
<queue-condition>
.
- Values
queue – An instance of
<queue>
.
-
queue-condition-thread
Generic function¶ - Signature
queue-condition-thread (condition) => (thread)
- Parameters
condition – An instance of
<queue-condition>
.
- Values
thread – An instance of
<thread>
.
Work¶
-
<work>
Class¶ - Superclasses
- Init-Keywords
function – A function to perform some work. The function must not have any required arguments.
- Operations
-
work-finished?
Generic function¶
-
work-perform
Generic function¶ - Signature
work-perform (work) => ()
- Parameters
work – An instance of
<work>
.
-
work-started?
Generic function¶
-
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 – An instance of
<locked-work>
.state – An instance of
<work-state>
. One of$work-started
or$work-finished
.
-
$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