ocaml/otherlibs/systhreads/mutex.mli

45 lines
2.0 KiB
OCaml

(***********************************************************************)
(* *)
(* Objective Caml *)
(* *)
(* Xavier Leroy and Pascal Cuoq, INRIA Rocquencourt *)
(* *)
(* Copyright 1995 Institut National de Recherche en Informatique et *)
(* en Automatique. All rights reserved. This file is distributed *)
(* under the terms of the GNU Library General Public License. *)
(* *)
(***********************************************************************)
(* $Id$ *)
(* Module [Mutex]: locks for mutual exclusion *)
(* Mutexes (mutual-exclusion locks) are used to implement critical sections
and protect shared mutable data structures against concurrent accesses.
The typical use is (if [m] is the mutex associated with the data structure
[D]):
[
Mutex.lock m;
(* Critical section that operates over D *);
Mutex.unlock m
]
*)
type t
(* The type of mutexes. *)
external create: unit -> t = "caml_mutex_new"
(* Return a new mutex. *)
external lock: t -> unit = "caml_mutex_lock"
(* Lock the given mutex. Only one thread can have the mutex locked
at any time. A thread that attempts to lock a mutex already locked
by another thread will suspend until the other thread unlocks
the mutex. *)
external try_lock: t -> bool = "caml_mutex_try_lock"
(* Same as [try_lock], but does not suspend the calling thread if
the mutex is already locked: just return [false] immediately
in that case. If the mutex is unlocked, lock it and
return [true]. *)
external unlock: t -> unit = "caml_mutex_unlock"
(* Unlock the given mutex. Other threads suspended trying to lock
the mutex will restart. *)