Legend:
Library
Module
Module type
Parameter
Class
Class type
Library
Module
Module type
Parameter
Class
Class type
A simple blocking queue.
This queue is quite basic and will not behave well under heavy contention. However, it can be sufficient for many practical use cases.
NOTE: this queue will typically block the caller thread in case the operation (push/pop) cannot proceed. Be wary of deadlocks when using the queue from a pool when you expect the other end to also be produced/consumed from the same pool.
See discussion on Fut.wait_block
for more details on deadlocks and how to mitigate the risk of running into them.
More scalable queues can be found in Lockfree (https://github.com/ocaml-multicore/lockfree/)
Unbounded blocking queue.
This queue is thread-safe and will block when calling pop
on it when it's empty.
val create : unit -> _ t
Create a new unbounded queue.
val size : _ t -> int
Number of items currently in the queue. Note that pop
might still block if this returns a non-zero number, since another thread might have consumed the items in the mean time.
val push : 'a t -> 'a -> unit
push q x
pushes x
into q
, and returns ()
.
In the current implementation, push q
will never block for a long time, it will only block while waiting for a lock so it can push the element.
val pop : 'a t -> 'a
pop q
pops the next element in q
. It might block until an element comes.