模块 Semaphore.Counting

module Counting: sig .. end

type t 

计数信号量的类型。

val make : int -> t

make n 返回一个新的计数信号量,初始值为 n。初始值 n 必须是非负的。

val release : t -> unit

release s 增加信号量 s 的值。如果其他线程正在等待 s,则其中一个线程将被重新启动。如果 s 的当前值等于 max_int,则信号量的值保持不变,并引发 Sys_error 异常以指示溢出。

val acquire : t -> unit

acquire s 阻塞调用线程,直到信号量 s 的值不为零,然后原子地减小 s 的值并返回。

val try_acquire : t -> bool

try_acquire s 如果信号量 s 的值为零,则立即返回 false。否则,s 的值将被原子地减小,并且 try_acquire s 返回 true

val get_value : t -> int

get_value s 返回信号量 s 的当前值。当前值可以随时被并发 Semaphore.Counting.releaseSemaphore.Counting.acquire 操作修改。因此,get_value 操作是竞争的,其结果应该只用于调试或信息性消息。