# Module Semaphore.Binary

    module Binary: sig .. end

    type t

The type of binary semaphores.

    val make : bool -> t

`make b` returns a new binary semaphore. If `b` is `true`, the initial value of the semaphore is 1, meaning "available". If `b` is `false`, the initial value of the semaphore is 0, meaning "unavailable".

    val release : t -> unit

`release s` sets the value of semaphore `s` to 1, putting it in the "available" state. If other threads are waiting on `s`, one of them is restarted.

    val acquire : t -> unit

`acquire s` blocks the calling thread until the semaphore `s` has value 1 (is available), then atomically sets it to 0 and returns.

    val try_acquire : t -> bool

`try_acquire s` immediately returns `false` if the semaphore `s` has value 0. If `s` has value 1, its value is atomically set to 0 and `try_acquire s` returns `true`.