module Counting:sig
..end
type
t
計數號誌 (counting semaphores) 的型別。
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
操作具有競爭條件 (racy),其結果僅應用於除錯或資訊訊息。