module Counting:sig
..end
type
t
计数信号量的类型。
val make : int -> t
make n
返回一个新的计数信号量,初始值为 n
。初始值 n
必须是非负的。
Invalid_argument
如果 n < 0
val release : t -> unit
release s
增加信号量 s
的值。如果其他线程正在等待 s
,则其中一个线程将被重新启动。如果 s
的当前值等于 max_int
,则信号量的值保持不变,并引发 Sys_error
异常以指示溢出。
Sys_error
如果信号量的值会溢出 max_int
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.release
和 Semaphore.Counting.acquire
操作修改。因此,get_value
操作是竞争的,其结果应该只用于调试或信息性消息。