package lockfree

  1. Overview
  2. Docs

Module Lockfree.Michael_scott_queueSource

Michael-Scott Queue. A classic multi-producer multi-consumer queue, robust and flexible. Recommended starting point when needing FIFO structure. It is inspired by Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms.

Sourcetype 'a t

The type of lock-free queue.

Sourceval create : unit -> 'a t

Create a new queue, which is initially empty.

Sourceval is_empty : 'a t -> bool

is_empty q returns empty if q is empty.

Sourceval push : 'a t -> 'a -> unit

push q v pushes v to the back of the queue.

Sourceval pop : 'a t -> 'a option

pop q pops an element e from the front of the queue and returns Some v if the queue is non-empty. Otherwise, returns None.

Sourceval clean_until : 'a t -> ('a -> bool) -> unit

clean_until q f drops the prefix of the queue until the element e, where f e is true. If no such element exists, then the queue is emptied.

Sourcetype 'a cursor

The type of cursor.

Sourceval snapshot : 'a t -> 'a cursor

Obtain a snapshot of the queue. This is a constant time operation.

Sourceval next : 'a cursor -> ('a * 'a cursor) option

next c returns Some (e, c') where e is the head of the queue and c' is the tail, if the queue is non-empty. Otherwise, returns None.