Library
Module
Module type
Parameter
Class
Class type
Lock-free multi-producer, single-consumer, domain-safe queue without support for cancellation.
This makes a good data structure for a scheduler's run queue and is currently (September 2022) used for Eio's scheduler.
val create : unit -> 'a t
create ()
returns a new empty queue.
val is_empty : 'a t -> bool
is_empty q
is true
if calling pop
would return None
.
val close : 'a t -> unit
close q
marks q
as closed, preventing any further items from being pushed by the producers (i.e. with push
).
val push : 'a t -> 'a -> unit
push q v
adds the element v
at the end of the queue q
. This can be used safely by multiple producer domains, in parallel with the other operations.
val pop : 'a t -> 'a
pop q
removes and returns the first element in queue q
.
val pop_opt : 'a t -> 'a option
pop_opt q
removes and returns the first element in queue q
or returns None
if the queue is empty.
val peek : 'a t -> 'a
peek q
returns the first element in queue q
.
val peek_opt : 'a t -> 'a option
peek_opt q
returns the first element in queue q
or returns None
if the queue is empty.