ocaml-opentelemetry/eio/Eio_utils/Lf_queue/index.html
2026-04-06 19:57:49 +00:00

2 lines
5.2 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Lf_queue (eio.Eio_utils.Lf_queue)</title><meta charset="utf-8"/><link rel="stylesheet" href="../../../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 3.1.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../../../index.html">Index</a> &#x00BB; <a href="../../index.html">eio</a> &#x00BB; <a href="../index.html">Eio_utils</a> &#x00BB; Lf_queue</nav><header class="odoc-preamble"><h1>Module <code><span>Eio_utils.Lf_queue</span></code></h1><p>A lock-free multi-producer, single-consumer, thread-safe queue without support for cancellation. This makes a good data structure for a scheduler's run queue.</p></header><div class="odoc-content"><div class="odoc-spec"><div class="spec type anchored" id="type-t"><a href="#type-t" class="anchor"></a><code><span><span class="keyword">type</span> <span>'a t</span></span></code></div><div class="spec-doc"><p>A queue of items of type <code>'a</code>.</p></div></div><div class="odoc-spec"><div class="spec exception anchored" id="exception-Closed"><a href="#exception-Closed" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Closed</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-create"><a href="#val-create" class="anchor"></a><code><span><span class="keyword">val</span> create : <span>unit <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>create ()</code> is a new empty queue.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-push"><a href="#val-push" class="anchor"></a><code><span><span class="keyword">val</span> push : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p><code>push t x</code> adds <code>x</code> to the tail of the queue. This can be used safely by multiple producer domains, in parallel with the other operations.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <a href="#exception-Closed"><code>Closed</code></a> <p>if <code>t</code> is closed.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-push_head"><a href="#val-push_head" class="anchor"></a><code><span><span class="keyword">val</span> push_head : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p><code>push_head t x</code> inserts <code>x</code> at the head of the queue. This can only be used by the consumer (if run in parallel with <a href="#val-pop"><code>pop</code></a>, the item might be skipped).</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <a href="#exception-Closed"><code>Closed</code></a> <p>if <code>t</code> is closed and empty.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-pop"><a href="#val-pop" class="anchor"></a><code><span><span class="keyword">val</span> pop : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> option</span></span></code></div><div class="spec-doc"><p><code>pop t</code> removes the head item from <code>t</code> and returns it. Returns <code>None</code> if <code>t</code> is currently empty.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <a href="#exception-Closed"><code>Closed</code></a> <p>if <code>t</code> has been closed and is empty.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-is_empty"><a href="#val-is_empty" class="anchor"></a><code><span><span class="keyword">val</span> is_empty : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> bool</span></code></div><div class="spec-doc"><p><code>is_empty t</code> is <code>true</code> if calling <code>pop</code> would return <code>None</code>.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <a href="#exception-Closed"><code>Closed</code></a> <p>if <code>t</code> has been closed and is empty.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-close"><a href="#val-close" class="anchor"></a><code><span><span class="keyword">val</span> close : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p><code>close t</code> marks <code>t</code> as closed, preventing any further items from being pushed.</p></div></div></div></body></html>