module Mutex:sig
..end
用于互斥的锁。
互斥锁(互斥锁)用于实现临界区并保护共享的可变数据结构免受并发访问。典型用法是(如果 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
)的情况下。