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 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link rel="stylesheet" href="style.css" type="text/css">
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="Start" href="index.html">
<link rel="previous" href="Sys.html">
<link rel="next" href="ThreadUnix.html">
<link rel="Up" href="index.html">
<link title="Index of types" rel=Appendix href="index_types.html">
<link title="Index of extensions" rel=Appendix href="index_extensions.html">
<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
<link title="Index of values" rel=Appendix href="index_values.html">
<link title="Index of modules" rel=Appendix href="index_modules.html">
<link title="Index of module types" rel=Appendix href="index_module_types.html">
<link title="Arg" rel="Chapter" href="Arg.html">
<link title="Array" rel="Chapter" href="Array.html">
<link title="ArrayLabels" rel="Chapter" href="ArrayLabels.html">
<link title="Bigarray" rel="Chapter" href="Bigarray.html">
<link title="Bool" rel="Chapter" href="Bool.html">
<link title="Buffer" rel="Chapter" href="Buffer.html">
<link title="Bytes" rel="Chapter" href="Bytes.html">
<link title="BytesLabels" rel="Chapter" href="BytesLabels.html">
<link title="Callback" rel="Chapter" href="Callback.html">
<link title="CamlinternalFormat" rel="Chapter" href="CamlinternalFormat.html">
<link title="CamlinternalFormatBasics" rel="Chapter" href="CamlinternalFormatBasics.html">
<link title="CamlinternalLazy" rel="Chapter" href="CamlinternalLazy.html">
<link title="CamlinternalMod" rel="Chapter" href="CamlinternalMod.html">
<link title="CamlinternalOO" rel="Chapter" href="CamlinternalOO.html">
<link title="Char" rel="Chapter" href="Char.html">
<link title="Complex" rel="Chapter" href="Complex.html">
<link title="Condition" rel="Chapter" href="Condition.html">
<link title="Digest" rel="Chapter" href="Digest.html">
<link title="Dynlink" rel="Chapter" href="Dynlink.html">
<link title="Ephemeron" rel="Chapter" href="Ephemeron.html">
<link title="Event" rel="Chapter" href="Event.html">
<link title="Filename" rel="Chapter" href="Filename.html">
<link title="Float" rel="Chapter" href="Float.html">
<link title="Format" rel="Chapter" href="Format.html">
<link title="Fun" rel="Chapter" href="Fun.html">
<link title="Gc" rel="Chapter" href="Gc.html">
<link title="Genlex" rel="Chapter" href="Genlex.html">
<link title="Hashtbl" rel="Chapter" href="Hashtbl.html">
<link title="Int" rel="Chapter" href="Int.html">
<link title="Int32" rel="Chapter" href="Int32.html">
<link title="Int64" rel="Chapter" href="Int64.html">
<link title="Lazy" rel="Chapter" href="Lazy.html">
<link title="Lexing" rel="Chapter" href="Lexing.html">
<link title="List" rel="Chapter" href="List.html">
<link title="ListLabels" rel="Chapter" href="ListLabels.html">
<link title="Map" rel="Chapter" href="Map.html">
<link title="Marshal" rel="Chapter" href="Marshal.html">
<link title="MoreLabels" rel="Chapter" href="MoreLabels.html">
<link title="Mutex" rel="Chapter" href="Mutex.html">
<link title="Nativeint" rel="Chapter" href="Nativeint.html">
<link title="Obj" rel="Chapter" href="Obj.html">
<link title="Ocaml_operators" rel="Chapter" href="Ocaml_operators.html">
<link title="Oo" rel="Chapter" href="Oo.html">
<link title="Option" rel="Chapter" href="Option.html">
<link title="Parsing" rel="Chapter" href="Parsing.html">
<link title="Printexc" rel="Chapter" href="Printexc.html">
<link title="Printf" rel="Chapter" href="Printf.html">
<link title="Queue" rel="Chapter" href="Queue.html">
<link title="Random" rel="Chapter" href="Random.html">
<link title="Result" rel="Chapter" href="Result.html">
<link title="Scanf" rel="Chapter" href="Scanf.html">
<link title="Seq" rel="Chapter" href="Seq.html">
<link title="Set" rel="Chapter" href="Set.html">
<link title="Spacetime" rel="Chapter" href="Spacetime.html">
<link title="Stack" rel="Chapter" href="Stack.html">
<link title="StdLabels" rel="Chapter" href="StdLabels.html">
<link title="Stdlib" rel="Chapter" href="Stdlib.html">
<link title="Str" rel="Chapter" href="Str.html">
<link title="Stream" rel="Chapter" href="Stream.html">
<link title="String" rel="Chapter" href="String.html">
<link title="StringLabels" rel="Chapter" href="StringLabels.html">
<link title="Sys" rel="Chapter" href="Sys.html">
<link title="Thread" rel="Chapter" href="Thread.html">
<link title="ThreadUnix" rel="Chapter" href="ThreadUnix.html">
<link title="Uchar" rel="Chapter" href="Uchar.html">
<link title="Unit" rel="Chapter" href="Unit.html">
<link title="Unix" rel="Chapter" href="Unix.html">
<link title="UnixLabels" rel="Chapter" href="UnixLabels.html">
<link title="Weak" rel="Chapter" href="Weak.html"><link title="Thread creation and termination" rel="Section" href="#1_Threadcreationandtermination">
<link title="Suspending threads" rel="Section" href="#1_Suspendingthreads">
<link title="Management of signals" rel="Section" href="#1_Managementofsignals">
<title>Thread</title>
</head>
<body>
<div class="navbar"><a class="pre" href="Sys.html" title="Sys">Previous</a>
<a class="up" href="index.html" title="Index">Up</a>
<a class="post" href="ThreadUnix.html" title="ThreadUnix">Next</a>
</div>
<h1>Module <a href="type_Thread.html">Thread</a></h1>
<pre><span id="MODULEThread"><span class="keyword">module</span> Thread</span>: <code class="code"><span class="keyword">sig</span></code> <a href="Thread.html">..</a> <code class="code"><span class="keyword">end</span></code></pre><div class="info module top">
<div class="info-desc">
<p>Lightweight threads for Posix <code class="code">1003.1c</code> and Win32.</p>
</div>
</div>
<hr width="100%">
<pre><span id="TYPEt"><span class="keyword">type</span> <code class="type"></code>t</span> </pre>
<div class="info ">
<div class="info-desc">
<p>The type of thread handles.</p>
</div>
</div>
<h2 id="1_Threadcreationandtermination">Thread creation and termination</h2>
<pre><span id="VALcreate"><span class="keyword">val</span> create</span> : <code class="type">('a -> 'b) -> 'a -> <a href="Thread.html#TYPEt">t</a></code></pre><div class="info ">
<div class="info-desc">
<p><code class="code"><span class="constructor">Thread</span>.create funct arg</code> creates a new thread of control,
in which the function application <code class="code">funct arg</code>
is executed concurrently with the other threads of the program.
The application of <code class="code"><span class="constructor">Thread</span>.create</code>
returns the handle of the newly created thread.
The new thread terminates when the application <code class="code">funct arg</code>
returns, either normally or by raising an uncaught exception.
In the latter case, the exception is printed on standard error,
but not propagated back to the parent thread. Similarly, the
result of the application <code class="code">funct arg</code> is discarded and not
directly accessible to the parent thread.</p>
</div>
</div>
<pre><span id="VALself"><span class="keyword">val</span> self</span> : <code class="type">unit -> <a href="Thread.html#TYPEt">t</a></code></pre><div class="info ">
<div class="info-desc">
<p>Return the thread currently executing.</p>
</div>
</div>
<pre><span id="VALid"><span class="keyword">val</span> id</span> : <code class="type"><a href="Thread.html#TYPEt">t</a> -> int</code></pre><div class="info ">
<div class="info-desc">
<p>Return the identifier of the given thread. A thread identifier
is an integer that identifies uniquely the thread.
It can be used to build data structures indexed by threads.</p>
</div>
</div>
<pre><span id="VALexit"><span class="keyword">val</span> exit</span> : <code class="type">unit -> unit</code></pre><div class="info ">
<div class="info-desc">
<p>Terminate prematurely the currently executing thread.</p>
</div>
</div>
<pre><span id="VALkill"><span class="keyword">val</span> kill</span> : <code class="type"><a href="Thread.html#TYPEt">t</a> -> unit</code></pre><div class="info ">
<div class="info-desc">
<p>Terminate prematurely the thread whose handle is given.</p>
</div>
</div>
<h2 id="1_Suspendingthreads">Suspending threads</h2>
<pre><span id="VALdelay"><span class="keyword">val</span> delay</span> : <code class="type">float -> unit</code></pre><div class="info ">
<div class="info-desc">
<p><code class="code">delay d</code> suspends the execution of the calling thread for
<code class="code">d</code> seconds. The other program threads continue to run during
this time.</p>
</div>
</div>
<pre><span id="VALjoin"><span class="keyword">val</span> join</span> : <code class="type"><a href="Thread.html#TYPEt">t</a> -> unit</code></pre><div class="info ">
<div class="info-desc">
<p><code class="code">join th</code> suspends the execution of the calling thread
until the thread <code class="code">th</code> has terminated.</p>
</div>
</div>
<pre><span id="VALwait_read"><span class="keyword">val</span> wait_read</span> : <code class="type"><a href="Unix.html#TYPEfile_descr">Unix.file_descr</a> -> unit</code></pre><div class="info ">
<div class="info-desc">
<p>See <a href="Thread.html#VALwait_write"><code class="code"><span class="constructor">Thread</span>.wait_write</code></a>.</p>
</div>
</div>
<pre><span id="VALwait_write"><span class="keyword">val</span> wait_write</span> : <code class="type"><a href="Unix.html#TYPEfile_descr">Unix.file_descr</a> -> unit</code></pre><div class="info ">
<div class="info-desc">
<p>This function does nothing in this implementation.</p>
</div>
</div>
<pre><span id="VALwait_timed_read"><span class="keyword">val</span> wait_timed_read</span> : <code class="type"><a href="Unix.html#TYPEfile_descr">Unix.file_descr</a> -> float -> bool</code></pre><div class="info ">
<div class="info-desc">
<p>See <a href="Thread.html#VALwait_timed_write"><code class="code"><span class="constructor">Thread</span>.wait_timed_write</code></a>.</p>
</div>
</div>
<pre><span id="VALwait_timed_write"><span class="keyword">val</span> wait_timed_write</span> : <code class="type"><a href="Unix.html#TYPEfile_descr">Unix.file_descr</a> -> float -> bool</code></pre><div class="info ">
<div class="info-desc">
<p>Suspend the execution of the calling thread until at least
one character or EOF is available for reading (<code class="code">wait_read</code>) or
one character can be written without blocking (<code class="code">wait_write</code>)
on the given Unix file descriptor. Wait for at most
the amount of time given as second argument (in seconds).
Return <code class="code"><span class="keyword">true</span></code> if the file descriptor is ready for input/output
and <code class="code"><span class="keyword">false</span></code> if the timeout expired.</p>
<p>These functions return immediately <code class="code"><span class="keyword">true</span></code> in the Win32
implementation.</p>
</div>
</div>
<pre><span id="VALselect"><span class="keyword">val</span> select</span> : <code class="type"><a href="Unix.html#TYPEfile_descr">Unix.file_descr</a> list -><br> <a href="Unix.html#TYPEfile_descr">Unix.file_descr</a> list -><br> <a href="Unix.html#TYPEfile_descr">Unix.file_descr</a> list -><br> float -> <a href="Unix.html#TYPEfile_descr">Unix.file_descr</a> list * <a href="Unix.html#TYPEfile_descr">Unix.file_descr</a> list * <a href="Unix.html#TYPEfile_descr">Unix.file_descr</a> list</code></pre><div class="info ">
<div class="info-desc">
<p>Suspend the execution of the calling thread until input/output
becomes possible on the given Unix file descriptors.
The arguments and results have the same meaning as for
<code class="code"><span class="constructor">Unix</span>.select</code>.
This function is not implemented yet under Win32.</p>
</div>
</div>
<pre><span id="VALwait_pid"><span class="keyword">val</span> wait_pid</span> : <code class="type">int -> int * <a href="Unix.html#TYPEprocess_status">Unix.process_status</a></code></pre><div class="info ">
<div class="info-desc">
<p><code class="code">wait_pid p</code> suspends the execution of the calling thread
until the process specified by the process identifier <code class="code">p</code>
terminates. Returns the pid of the child caught and
its termination status, as per <code class="code"><span class="constructor">Unix</span>.wait</code>.
This function is not implemented under MacOS.</p>
</div>
</div>
<pre><span id="VALyield"><span class="keyword">val</span> yield</span> : <code class="type">unit -> unit</code></pre><div class="info ">
<div class="info-desc">
<p>Re-schedule the calling thread without suspending it.
This function can be used to give scheduling hints,
telling the scheduler that now is a good time to
switch to other threads.</p>
</div>
</div>
<h2 id="1_Managementofsignals">Management of signals</h2><p>Signal handling follows the POSIX thread model: signals generated
by a thread are delivered to that thread; signals generated externally
are delivered to one of the threads that does not block it.
Each thread possesses a set of blocked signals, which can be modified
using <a href="Thread.html#VALsigmask"><code class="code"><span class="constructor">Thread</span>.sigmask</code></a>. This set is inherited at thread creation time.
Per-thread signal masks are supported only by the system thread library
under Unix, but not under Win32, nor by the VM thread library.</p>
<pre><span id="VALsigmask"><span class="keyword">val</span> sigmask</span> : <code class="type"><a href="Unix.html#TYPEsigprocmask_command">Unix.sigprocmask_command</a> -> int list -> int list</code></pre><div class="info ">
<div class="info-desc">
<p><code class="code">sigmask cmd sigs</code> changes the set of blocked signals for the
calling thread.
If <code class="code">cmd</code> is <code class="code"><span class="constructor">SIG_SETMASK</span></code>, blocked signals are set to those in
the list <code class="code">sigs</code>.
If <code class="code">cmd</code> is <code class="code"><span class="constructor">SIG_BLOCK</span></code>, the signals in <code class="code">sigs</code> are added to
the set of blocked signals.
If <code class="code">cmd</code> is <code class="code"><span class="constructor">SIG_UNBLOCK</span></code>, the signals in <code class="code">sigs</code> are removed
from the set of blocked signals.
<code class="code">sigmask</code> returns the set of previously blocked signals for the thread.</p>
</div>
</div>
<pre><span id="VALwait_signal"><span class="keyword">val</span> wait_signal</span> : <code class="type">int list -> int</code></pre><div class="info ">
<div class="info-desc">
<p><code class="code">wait_signal sigs</code> suspends the execution of the calling thread
until the process receives one of the signals specified in the
list <code class="code">sigs</code>. It then returns the number of the signal received.
Signal handlers attached to the signals in <code class="code">sigs</code> will not
be invoked. The signals <code class="code">sigs</code> are expected to be blocked before
calling <code class="code">wait_signal</code>.</p>
</div>
</div>
</body></html>
|