module Mutex:sig
..end
用於互斥的鎖定。
互斥鎖(mutual-exclusion locks)用於實作臨界區,並保護共享的可變資料結構,避免同時存取。典型的用法是(如果 m
是與資料結構 D
相關聯的互斥鎖):
Mutex.lock m;
(* Critical section that operates over D *);
Mutex.unlock m
type
t
互斥鎖的類型。
val create : unit -> t
返回一個新的互斥鎖。
val lock : t -> unit
鎖定給定的互斥鎖。任何時間點只能有一個執行緒持有鎖定的互斥鎖。嘗試鎖定已被其他執行緒鎖定的互斥鎖的執行緒將會暫停,直到其他執行緒解鎖該互斥鎖。
Sys_error
(行為取決於平台)Sys_error
,如果互斥鎖已被呼叫 Mutex.lock
的執行緒鎖定。val try_lock : t -> bool
與 Mutex.lock
相同,但如果互斥鎖已被鎖定,則不會暫停呼叫的執行緒:在這種情況下立即返回 false
。如果互斥鎖未鎖定,則鎖定它並返回 true
。
val unlock : t -> unit
解鎖給定的互斥鎖。其他暫停等待鎖定該互斥鎖的執行緒將會重新啟動。互斥鎖必須事先由呼叫 Mutex.unlock
的執行緒鎖定。
Sys_error
。Sys_error
,如果互斥鎖未鎖定或由另一個執行緒鎖定。val protect : t -> (unit -> 'a) -> 'a
protect mutex f
在一個臨界區中執行 f()
,其中 mutex
被鎖定(使用 Mutex.lock
);然後它會負責釋放 mutex
,無論 f()
返回值還是引發例外。
即使在某些信號處理常式中引發了非同步例外(例如 Sys.Break
),也保證解鎖操作總是會發生。