mirror of
https://github.com/c-cube/moonpool.git
synced 2025-12-13 06:20:49 -05:00
30 lines
848 B
OCaml
30 lines
848 B
OCaml
(** Work-stealing deque.
|
|
|
|
Adapted from "Dynamic circular work stealing deque", Chase & Lev.
|
|
|
|
However note that this one is not dynamic in the sense that there is no
|
|
resizing. Instead we return [false] when [push] fails, which keeps the
|
|
implementation fairly lightweight. *)
|
|
|
|
type 'a t
|
|
(** Deque containing values of type ['a] *)
|
|
|
|
val create : dummy:'a -> unit -> 'a t
|
|
(** Create a new deque. *)
|
|
|
|
val push : 'a t -> 'a -> bool
|
|
(** Push value at the bottom of deque. returns [true] if it succeeds. This must
|
|
be called only by the owner thread. *)
|
|
|
|
val pop : 'a t -> 'a option
|
|
(** Pop value from the bottom of deque. This must be called only by the owner
|
|
thread. *)
|
|
|
|
exception Empty
|
|
|
|
val pop_exn : 'a t -> 'a
|
|
|
|
val steal : 'a t -> 'a option
|
|
(** Try to steal from the top of deque. This is thread-safe. *)
|
|
|
|
val size : _ t -> int
|