模組 Mutex

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

鎖定給定的互斥鎖。任何時間點只能有一個執行緒持有鎖定的互斥鎖。嘗試鎖定已被其他執行緒鎖定的互斥鎖的執行緒將會暫停,直到其他執行緒解鎖該互斥鎖。

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),也保證解鎖操作總是會發生。