---
name: "Semaphore.Counting"
section: "3o"
platform: "linux"
package: "ocaml"
version: "5.5.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Semaphore.Counting"
---

# Semaphore.Counting(3o)

no description

## NAME

Semaphore.Counting - no description

## Module

Module   Semaphore.Counting

## Documentation

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

*type t*

The type of counting semaphores.

*val make* :  **int -\> t**

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

**Raises Invalid\_argument** if  **n \< 0**

*val release* :  **t -\> 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 -\> 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 -\> 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 -\> 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.
