/usr/lib/ocaml/netsys/netsys_oothr.mli is in libocamlnet-ocaml-dev 4.1.2-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | (* $Id$ *)
(** Object-oriented thread API *)
(** Makes the most important multi-threading primitives available using
object types. For single-threaded apps, the operations are substituted
by no-ops.
*)
class type mtprovider =
object
method single_threaded : bool
(** Whether this is a single-threaded program. In this case, a number
of methods change their meaning, as described below.
*)
method create_thread : 's 't . ('s -> 't) -> 's -> thread
(** In a multi-threaded program: Starts a new thread, and calls the
passed function with the passed argument in the new thread
(like [Thread.create]).
In a single-threaded program: fails.
*)
method self : thread
(** In a multi-threaded program: Returns the currently running thread.
Subsequent calls of [self] can return different objects for the
same thread, but the [id] method will always return the same number.
In a single-threaded program: Returns a dummy object (see below).
*)
method yield : unit -> unit
(** In a multi-threaded program: gives a hint that another thread should
better run now.
In a single-threaded program: this is a no-op.
*)
method create_mutex : unit -> mutex
(** In a multi-threaded program: Creates a mutex and returns the object.
In a single-threaded program: Returns a dummy mutex object (see below).
*)
method create_condition : unit -> condition
(** In a multi-threaded program: Creates a condition variable and returns
the object.
In a single-threaded program: Returns a dummy variable (see below).
*)
end
and thread =
object
method id : int
(** In a multi-threaded program: Returns the thread ID.
In a single-threaded program: Returns 0.
*)
method join : unit -> unit
(** In a multi-threaded program: Suspends the calling thread until this
thread terminates.
In a single-threaded program: fails
*)
method repr : exn
(** May be used internally be the implementation *)
end
and mutex =
object
method lock : unit -> unit
(** In a multi-threaded program: Suspends the calling thread until the
mutex is locked.
In a single-threaded program: This is a no-op
*)
method unlock : unit -> unit
(** In a multi-threaded program: Unlocks a mutex.
In a single-threaded program: This is a no-op
*)
method try_lock : unit -> bool
(** In a multi-threaded program: Tries to immediately lock the mutex,
and returns whether the lock could be obtained.
In a single-threaded program: returns [true]
*)
method repr : exn
(** May be used internally be the implementation *)
end
and condition =
object
method wait : mutex -> unit
(** In a multi-threaded program: Wait for the condition to be true
and use the mutex to protect this situation.
In a single-threaded program: this is a no-op.
*)
method signal : unit -> unit
(** In a multi-threaded program: Signal one process that the condition
holds.
In a single-threaded program: this is a no-op.
*)
method broadcast : unit -> unit
(** In a multi-threaded program: Signal all waiting processes that the
condition holds.
In a single-threaded program: this is a no-op.
*)
method repr : exn
(** May be used internally be the implementation *)
end
val provider : mtprovider ref
(** Return the multi-threading provider *)
val serialize : mutex -> ('a -> 'b) -> 'a -> 'b
(** [serialize m f arg]: Locks [m], runs [f arg], unlocks [m], and returns
the result.
*)
val atomic_init : 'a option ref -> 'a -> 'a
(** [atomic_init var new_value]: If the variable [var] is [None], it is
set to [Some new_value], and [new_value] is returned. If it is
[Some old_value], then [old_value] is returned. The operation is
atomic.
This function works independently of the provider.
*)
val compare_and_swap : 'a ref -> 'a -> 'a -> bool
(** [compare_and_swap var old_value new_value]: If the variable [var] is
physically identical to [old_value] it is atomically set to
[new_value], and [true] is returned. Otherwise, [var] is not assigned,
and [false] is returned.
This function works independently of the provider.
*)
|