summaryrefslogtreecommitdiff
path: root/ocaml-binary-annot/otherlibs/systhreads/condition.mli
diff options
context:
space:
mode:
Diffstat (limited to 'ocaml-binary-annot/otherlibs/systhreads/condition.mli')
-rw-r--r--ocaml-binary-annot/otherlibs/systhreads/condition.mli53
1 files changed, 53 insertions, 0 deletions
diff --git a/ocaml-binary-annot/otherlibs/systhreads/condition.mli b/ocaml-binary-annot/otherlibs/systhreads/condition.mli
new file mode 100644
index 0000000000..5bc9d6740a
--- /dev/null
+++ b/ocaml-binary-annot/otherlibs/systhreads/condition.mli
@@ -0,0 +1,53 @@
+(***********************************************************************)
+(* *)
+(* Objective Caml *)
+(* *)
+(* Xavier Leroy and Damien Doligez, INRIA Rocquencourt *)
+(* *)
+(* Copyright 1996 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, with *)
+(* the special exception on linking described in file ../../LICENSE. *)
+(* *)
+(***********************************************************************)
+
+(* $Id$ *)
+
+(** Condition variables to synchronize between threads.
+
+ Condition variables are used when one thread wants to wait until another
+ thread has finished doing something: the former thread ``waits'' on the
+ condition variable, the latter thread ``signals'' the condition when it
+ is done. Condition variables should always be protected by a mutex.
+ The typical use is (if [D] is a shared data structure, [m] its mutex,
+ and [c] is a condition variable):
+ {[
+ Mutex.lock m;
+ while (* some predicate P over D is not satisfied *) do
+ Condition.wait c m
+ done;
+ (* Modify D *)
+ if (* the predicate P over D is now satified *) then Condition.signal c;
+ Mutex.unlock m
+ ]}
+*)
+
+type t
+(** The type of condition variables. *)
+
+val create : unit -> t
+(** Return a new condition variable. *)
+
+val wait : t -> Mutex.t -> unit
+(** [wait c m] atomically unlocks the mutex [m] and suspends the
+ calling process on the condition variable [c]. The process will
+ restart after the condition variable [c] has been signalled.
+ The mutex [m] is locked again before [wait] returns. *)
+
+val signal : t -> unit
+(** [signal c] restarts one of the processes waiting on the
+ condition variable [c]. *)
+
+val broadcast : t -> unit
+(** [broadcast c] restarts all processes waiting on the
+ condition variable [c]. *)