Lockfree.Single_consumer_queue
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 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 option
pop q
removes and returns the first element in queue q
or returns None
if the queue is empty.
val push_head : 'a t -> 'a -> unit
push_head q v
adds the element v
at the head of the queue q
. This can only be used by the consumer (if run in parallel with pop
, the item might be skipped).
val is_empty : 'a t -> bool
is_empty q
is true
if calling pop
would return None
.