sig
  type t
  external make : int32 -> bool -> Semaphore.t = "ocamljava_semaphore_make"
  external acquire : Semaphore.t -> int32 -> unit
    = "ocamljava_semaphore_acquire"
  external acquire_uninterruptibly : Semaphore.t -> int32 -> unit
    = "ocamljava_semaphore_acquire_uninterruptibly"
  external available_permits : Semaphore.t -> int32
    = "ocamljava_semaphore_available_permits"
  external drain_permits : Semaphore.t -> int32
    = "ocamljava_semaphore_drain_permits"
  external get_queue_length : Semaphore.t -> int32
    = "ocamljava_semaphore_get_queue_length"
  external has_queued_threads : Semaphore.t -> bool
    = "ocamljava_semaphore_has_queued_threads"
  external is_fair : Semaphore.t -> bool = "ocamljava_semaphore_is_fair"
  external release : Semaphore.t -> int32 -> unit
    = "ocamljava_semaphore_release"
  external try_acquire : Semaphore.t -> int32 -> bool
    = "ocamljava_semaphore_try_acquire"
  external try_acquire_time :
    Semaphore.t -> int32 -> int64 -> TimeUnit.t -> bool
    = "ocamljava_semaphore_try_acquire"
end