Semaphore.Counting(3) OCaml library Semaphore.Counting(3)

# [NAME](#NAME)

Semaphore.Counting - no description

# [Module](#Module)

Module Semaphore.Counting

# [Documentation](#Documentation)

Module **Counting**  
: **sig end**

*type t*

The type of counting semaphores.

*val make* : **int -&gt; t**

**make n** returns a new counting semaphore, with initial value **n** . The initial value **n** must be nonnegative.

**Raises Invalid\_argument** if **n &lt; 0**

*val release* : **t -&gt; unit**

**release s** increments the value of semaphore **s** . If other threads are waiting on **s** , one of them is restarted. If the current value of **s** is equal to **max\_int** , the value of the semaphore is unchanged and a **Sys\_error** exception is raised to signal overflow.

**Raises Sys\_error** if the value of the semaphore would overflow **max\_int**

*val acquire* : **t -&gt; unit**

**acquire s** blocks the calling thread until the value of semaphore **s** is not zero, then atomically decrements the value of **s** and returns.

*val try\_acquire* : **t -&gt; bool**

**try\_acquire s** immediately returns **false** if the value of semaphore **s** is zero. Otherwise, the value of **s** is atomically decremented and **try\_acquire s** returns **true** .

*val get\_value* : **t -&gt; int**

**get\_value s** returns the current value of semaphore **s** . The current value can be modified at any time by concurrent **Semaphore.Counting.release** and **Semaphore.Counting.acquire** operations. Hence, the **get\_value** operation is racy, and its result should only be used for debugging or informational messages.

2026-10-01 OCamldoc

---

Document: Semaphore.Counting(3o) from ocaml 5.5.1-r1 (Chainguard OS)
Source: https://github.com/ocaml/ocaml
