Thread-safe queue module, using locks.
include sig ... endval sexp_of_t : ('a ‑> Sexplib.Sexp.t) ‑> 'a t ‑> Sexplib.Sexp.tval create : int ‑> 'a tcreate maxsize returns a synchronized queue bounded to have no more than
maxsize elements.
val push_or_drop : 'a t ‑> 'a ‑> boolPushes an event on the queue if the queue is less than maxsize, otherwise drops it. Returns true if the push was successful
val lpop : 'a t ‑> 'a * intreturns the element popped and the length of the queue after * this element was popped.
val transfer_queue_in : 'a t ‑> 'a Core__.Import.Linked_queue.t ‑> unitTransfers all the elements from an ordinary queue into the squeue. Blocks until there's room on the queue, then pushes. may grow queue past maxsize.
val transfer_queue_in_uncond : 'a t ‑> 'a Core__.Import.Linked_queue.t ‑> unitval transfer_queue : 'a t ‑> 'a Core__.Import.Linked_queue.t ‑> unitTransfers all elements from the squeue to an ordinary queue. The elements remain in order. Waits until at least one element can be transferred.
val transfer_queue_nowait : 'a t ‑> 'a Core__.Import.Linked_queue.t ‑> unitTransfers all elements from the squeue to an ordinary queue. The elements remain in order. Does not wait for elements to arrive.
val wait_not_empty : 'a t ‑> unitwait_not_empty sq Waits for something to be available. This is
useful if you want to wait, but not take something out. This
function is not useful in most cases, but in some complex cases it
is essential. For example, if you need to take another lock before
you remove something from the queue for processing, you might
want to try to take that other lock, and if it fails do something
else.
This function is not dangerous, there is just ONE thing you HAVE to remember if you use it. Just because this function returns doesn't mean that pop will succeed, someone might have gotten there first, so you have to use transfer_queue_nowait if you don't want to block.