模块 Mutex

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

锁定给定的互斥锁。任何时候只有一个线程可以拥有互斥锁的锁定。尝试锁定另一个线程已经锁定的互斥锁的线程将挂起,直到另一个线程解锁该互斥锁。

val try_lock : t -> bool

Mutex.lock 相同,但如果互斥锁已锁定,则不会挂起调用线程:在这种情况下,立即返回 false。如果互斥锁未锁定,则锁定它并返回 true

val unlock : t -> unit

解锁给定的互斥锁。其他线程挂起尝试锁定互斥锁将重新启动。互斥锁必须先前已由调用 Mutex.unlock 的线程锁定。

val protect : t -> (unit -> 'a) -> 'a

protect mutex f 在一个临界区中运行 f(),其中 mutex 被锁定(使用 Mutex.lock);然后它负责释放 mutex,无论 f() 返回了一个值还是抛出了一个异常。

解锁操作保证始终发生,即使在某些信号处理程序中引发异步异常(例如 Sys.Break)的情况下。