mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 11:15:31 -05:00
6 lines
No EOL
4.1 KiB
HTML
6 lines
No EOL
4.1 KiB
HTML
<!DOCTYPE html>
|
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CCSemaphore (containers.CCSemaphore)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><meta name="generator" content="doc-ock-html v1.0.0-1-g1fc9bf0"/></head><body><nav id="top"><a href="../index.html">Up</a> — <span class="package">package <a href="../index.html">containers</a></span></nav><header><h1><span class="keyword">Module</span> <span class="module-path">CCSemaphore</span></h1></header><h2>Semaphores</h2><ul class="at-tag"><li><span class="at-tag since">Since</span>: 0.13</li></ul><div class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>t</code><code></code><code></code></div><div class="doc"><p>A semaphore</p></div></div><div class="spec val" id="val-create"><a href="#val-create" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>create : int <span class="keyword">‑></span> <a href="index.html#type-t">t</a></code></div><div class="doc"><p><code class="code">create n</code> creates a semaphore with initial value <code class="code">n</code>.</p><ul class="at-tag"><li><span class="at-tag raise">Raises</span> <span class="module-path">Invalid_argument</span>: if <code class="code">n <= 0</code>.</li></ul></div></div><div class="spec val" id="val-get"><a href="#val-get" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>get : <a href="index.html#type-t">t</a> <span class="keyword">‑></span> int</code></div><div class="doc"><p>Current value.</p></div></div><div class="spec val" id="val-acquire"><a href="#val-acquire" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>acquire : int <span class="keyword">‑></span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> unit</code></div><div class="doc"><p><code class="code">acquire n s</code> blocks until <code class="code">get s >= n</code>, then atomically
|
|
sets <code class="code">s := !s - n</code>.</p></div></div><div class="spec val" id="val-release"><a href="#val-release" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>release : int <span class="keyword">‑></span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> unit</code></div><div class="doc"><p><code class="code">release n s</code> atomically sets <code class="code">s := !s + n</code>.</p></div></div><div class="spec val" id="val-with_acquire"><a href="#val-with_acquire" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>with_acquire : n:int <span class="keyword">‑></span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> f:(unit <span class="keyword">‑></span> <span class="type-var">'a</span>) <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p><code class="code">with_acquire ~n s ~f</code> first acquires <code class="code">s</code> with <code class="code">n</code> units,
|
|
calls <code class="code">f ()</code>, and then releases <code class="code">s</code> with <code class="code">n</code> units.
|
|
Safely release the semaphore even if <code class="code">f ()</code> fails.</p></div></div><div class="spec val" id="val-wait_until_at_least"><a href="#val-wait_until_at_least" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>wait_until_at_least : n:int <span class="keyword">‑></span> <a href="index.html#type-t">t</a> <span class="keyword">‑></span> f:(unit <span class="keyword">‑></span> <span class="type-var">'a</span>) <span class="keyword">‑></span> <span class="type-var">'a</span></code></div><div class="doc"><p><code class="code">wait_until_at_least ~n s ~f</code> waits until <code class="code">get s >= n</code>, then calls <code class="code">f ()</code>
|
|
and returns its result. Doesn't modify the semaphore.</p></div></div></body></html> |