OSDN Git Service

FIRST REPOSITORY
[eos/hostdependOTHERS.git] / CELLLINUX64 / util / CELLLINUX64 / man / man3 / Tcl_ConditionNotify.3
1 '\"
2 '\" Copyright (c) 1999 Scriptics Corporation
3 '\" Copyright (c) 1998 Sun Microsystems, Inc.
4 '\"
5 '\" See the file "license.terms" for information on usage and redistribution
6 '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
7 '\" 
8 '\" RCS: @(#) $Id: Thread.3,v 1.14 2002/07/01 18:24:39 jenglish Exp $
9 '\" 
10 '\" The definitions below are for supplemental macros used in Tcl/Tk
11 '\" manual entries.
12 '\"
13 '\" .AP type name in/out ?indent?
14 '\"     Start paragraph describing an argument to a library procedure.
15 '\"     type is type of argument (int, etc.), in/out is either "in", "out",
16 '\"     or "in/out" to describe whether procedure reads or modifies arg,
17 '\"     and indent is equivalent to second arg of .IP (shouldn't ever be
18 '\"     needed;  use .AS below instead)
19 '\"
20 '\" .AS ?type? ?name?
21 '\"     Give maximum sizes of arguments for setting tab stops.  Type and
22 '\"     name are examples of largest possible arguments that will be passed
23 '\"     to .AP later.  If args are omitted, default tab stops are used.
24 '\"
25 '\" .BS
26 '\"     Start box enclosure.  From here until next .BE, everything will be
27 '\"     enclosed in one large box.
28 '\"
29 '\" .BE
30 '\"     End of box enclosure.
31 '\"
32 '\" .CS
33 '\"     Begin code excerpt.
34 '\"
35 '\" .CE
36 '\"     End code excerpt.
37 '\"
38 '\" .VS ?version? ?br?
39 '\"     Begin vertical sidebar, for use in marking newly-changed parts
40 '\"     of man pages.  The first argument is ignored and used for recording
41 '\"     the version when the .VS was added, so that the sidebars can be
42 '\"     found and removed when they reach a certain age.  If another argument
43 '\"     is present, then a line break is forced before starting the sidebar.
44 '\"
45 '\" .VE
46 '\"     End of vertical sidebar.
47 '\"
48 '\" .DS
49 '\"     Begin an indented unfilled display.
50 '\"
51 '\" .DE
52 '\"     End of indented unfilled display.
53 '\"
54 '\" .SO
55 '\"     Start of list of standard options for a Tk widget.  The
56 '\"     options follow on successive lines, in four columns separated
57 '\"     by tabs.
58 '\"
59 '\" .SE
60 '\"     End of list of standard options for a Tk widget.
61 '\"
62 '\" .OP cmdName dbName dbClass
63 '\"     Start of description of a specific option.  cmdName gives the
64 '\"     option's name as specified in the class command, dbName gives
65 '\"     the option's name in the option database, and dbClass gives
66 '\"     the option's class in the option database.
67 '\"
68 '\" .UL arg1 arg2
69 '\"     Print arg1 underlined, then print arg2 normally.
70 '\"
71 '\" RCS: @(#) $Id: man.macros,v 1.4 2000/08/25 06:18:32 ericm Exp $
72 '\"
73 '\"     # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
74 .if t .wh -1.3i ^B
75 .nr ^l \n(.l
76 .ad b
77 '\"     # Start an argument description
78 .de AP
79 .ie !"\\$4"" .TP \\$4
80 .el \{\
81 .   ie !"\\$2"" .TP \\n()Cu
82 .   el          .TP 15
83 .\}
84 .ta \\n()Au \\n()Bu
85 .ie !"\\$3"" \{\
86 \&\\$1  \\fI\\$2\\fP    (\\$3)
87 .\".b
88 .\}
89 .el \{\
90 .br
91 .ie !"\\$2"" \{\
92 \&\\$1  \\fI\\$2\\fP
93 .\}
94 .el \{\
95 \&\\fI\\$1\\fP
96 .\}
97 .\}
98 ..
99 '\"     # define tabbing values for .AP
100 .de AS
101 .nr )A 10n
102 .if !"\\$1"" .nr )A \\w'\\$1'u+3n
103 .nr )B \\n()Au+15n
104 .\"
105 .if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
106 .nr )C \\n()Bu+\\w'(in/out)'u+2n
107 ..
108 .AS Tcl_Interp Tcl_CreateInterp in/out
109 '\"     # BS - start boxed text
110 '\"     # ^y = starting y location
111 '\"     # ^b = 1
112 .de BS
113 .br
114 .mk ^y
115 .nr ^b 1u
116 .if n .nf
117 .if n .ti 0
118 .if n \l'\\n(.lu\(ul'
119 .if n .fi
120 ..
121 '\"     # BE - end boxed text (draw box now)
122 .de BE
123 .nf
124 .ti 0
125 .mk ^t
126 .ie n \l'\\n(^lu\(ul'
127 .el \{\
128 .\"     Draw four-sided box normally, but don't draw top of
129 .\"     box if the box started on an earlier page.
130 .ie !\\n(^b-1 \{\
131 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
132 .\}
133 .el \}\
134 \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
135 .\}
136 .\}
137 .fi
138 .br
139 .nr ^b 0
140 ..
141 '\"     # VS - start vertical sidebar
142 '\"     # ^Y = starting y location
143 '\"     # ^v = 1 (for troff;  for nroff this doesn't matter)
144 .de VS
145 .if !"\\$2"" .br
146 .mk ^Y
147 .ie n 'mc \s12\(br\s0
148 .el .nr ^v 1u
149 ..
150 '\"     # VE - end of vertical sidebar
151 .de VE
152 .ie n 'mc
153 .el \{\
154 .ev 2
155 .nf
156 .ti 0
157 .mk ^t
158 \h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
159 .sp -1
160 .fi
161 .ev
162 .\}
163 .nr ^v 0
164 ..
165 '\"     # Special macro to handle page bottom:  finish off current
166 '\"     # box/sidebar if in box/sidebar mode, then invoked standard
167 '\"     # page bottom macro.
168 .de ^B
169 .ev 2
170 'ti 0
171 'nf
172 .mk ^t
173 .if \\n(^b \{\
174 .\"     Draw three-sided box if this is the box's first page,
175 .\"     draw two sides but no top otherwise.
176 .ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
177 .el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
178 .\}
179 .if \\n(^v \{\
180 .nr ^x \\n(^tu+1v-\\n(^Yu
181 \kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
182 .\}
183 .bp
184 'fi
185 .ev
186 .if \\n(^b \{\
187 .mk ^y
188 .nr ^b 2
189 .\}
190 .if \\n(^v \{\
191 .mk ^Y
192 .\}
193 ..
194 '\"     # DS - begin display
195 .de DS
196 .RS
197 .nf
198 .sp
199 ..
200 '\"     # DE - end display
201 .de DE
202 .fi
203 .RE
204 .sp
205 ..
206 '\"     # SO - start of list of standard options
207 .de SO
208 .SH "STANDARD OPTIONS"
209 .LP
210 .nf
211 .ta 5.5c 11c
212 .ft B
213 ..
214 '\"     # SE - end of list of standard options
215 .de SE
216 .fi
217 .ft R
218 .LP
219 See the \\fBoptions\\fR manual entry for details on the standard options.
220 ..
221 '\"     # OP - start of full description for a single option
222 .de OP
223 .LP
224 .nf
225 .ta 4c
226 Command-Line Name:      \\fB\\$1\\fR
227 Database Name:  \\fB\\$2\\fR
228 Database Class: \\fB\\$3\\fR
229 .fi
230 .IP
231 ..
232 '\"     # CS - begin code excerpt
233 .de CS
234 .RS
235 .nf
236 .ta .25i .5i .75i 1i
237 ..
238 '\"     # CE - end code excerpt
239 .de CE
240 .fi
241 .RE
242 ..
243 .de UL
244 \\$1\l'|0\(ul'\\$2
245 ..
246 .TH Threads 3 "8.1" Tcl "Tcl Library Procedures"
247 .BS
248 .SH NAME
249 Tcl_ConditionNotify, Tcl_ConditionWait, Tcl_ConditionFinalize, Tcl_GetThreadData, Tcl_MutexLock, Tcl_MutexUnlock, Tcl_MutexFinalize, Tcl_CreateThread, Tcl_JoinThread \- Tcl thread support.
250 .SH SYNOPSIS
251 .nf
252 \fB#include <tcl.h>\fR
253 .sp
254 void
255 \fBTcl_ConditionNotify\fR(\fIcondPtr\fR)
256 .sp
257 void
258 \fBTcl_ConditionWait\fR(\fIcondPtr, mutexPtr, timePtr\fR)
259 .sp
260 void
261 \fBTcl_ConditionFinalize\fR(\fIcondPtr\fR)
262 .sp
263 Void *
264 \fBTcl_GetThreadData\fR(\fIkeyPtr, size\fR)
265 .sp
266 void
267 \fBTcl_MutexLock\fR(\fImutexPtr\fR)
268 .sp
269 void
270 \fBTcl_MutexUnlock\fR(\fImutexPtr\fR)
271 .sp
272 void
273 \fBTcl_MutexFinalize\fR(\fImutexPtr\fR)
274 .sp
275 int
276 \fBTcl_CreateThread\fR(\fIidPtr, threadProc, clientData, stackSize, flags\fR)
277 .sp
278 int
279 \fBTcl_JoinThread\fR(\fIid, result\fR)
280 .SH ARGUMENTS
281 .AS Tcl_ThreadDataKey *keyPtr
282 .AP Tcl_Condition *condPtr in
283 A condition variable, which must be associated with a mutex lock.
284 .AP Tcl_Condition *mutexPtr in
285 A mutex lock.
286 .AP Tcl_Time *timePtr in
287 A time limit on the condition wait.  NULL to wait forever.
288 Note that a polling value of 0 seconds doesn't make much sense.
289 .AP Tcl_ThreadDataKey *keyPtr in
290 This identifies a block of thread local storage.  The key should be
291 static and process-wide, yet each thread will end up associating
292 a different block of storage with this key.
293 .AP int *size in
294 The size of the thread local storage block.  This amount of data
295 is allocated and initialized to zero the first time each thread
296 calls \fBTcl_GetThreadData\fR.
297 .AP Tcl_ThreadId *idPtr out
298 The referred storage will contain the id of the newly created thread as
299 returned by the operating system.
300 .AP Tcl_ThreadId id in
301 Id of the thread waited upon.
302 .AP Tcl_ThreadCreateProc threadProc in
303 This procedure will act as the \fBmain()\fR of the newly created
304 thread. The specified \fIclientData\fR will be its sole argument.
305 .AP ClientData clientData in
306 Arbitrary information. Passed as sole argument to the \fIthreadProc\fR.
307 .AP int stackSize in
308 The size of the stack given to the new thread.
309 .AP int flags in
310 Bitmask containing flags allowing the caller to modify behaviour of
311 the new thread.
312 .AP int *result out
313 The referred storage is used to place the exit code of the thread
314 waited upon into it.
315 .BE
316 .SH INTRODUCTION
317 Beginning with the 8.1 release, the Tcl core is thread safe, which
318 allows you to incorporate Tcl into multithreaded applications without
319 customizing the Tcl core.  To enable Tcl multithreading support,
320 you must include the \fB--enable-threads\fR option to \fBconfigure\fR
321 when you configure and compile your Tcl core.
322 .PP
323 An important constraint of the Tcl threads implementation is that
324 \fIonly the thread that created a Tcl interpreter can use that
325 interpreter\fR.  In other words, multiple threads can not access
326 the same Tcl interpreter.  (However, as was the case in previous
327 releases, a single thread can safely create and use multiple
328 interpreters.)
329 .PP
330 .VS 8.3.1
331 Tcl does provide \fBTcl_CreateThread\fR for creating threads. The
332 caller can determine the size of the stack given to the new thread and
333 modify the behaviour through the supplied \fIflags\fR. The value
334 \fBTCL_THREAD_STACK_DEFAULT\fR for the \fIstackSize\fR indicates that
335 the default size as specified by the operating system is to be used
336 for the new thread. As for the flags, currently are only the values
337 \fBTCL_THREAD_NOFLAGS\fR and \fBTCL_THREAD_JOINABLE\fR defined. The
338 first of them invokes the default behaviour with no
339 specialties. Using the second value marks the new thread as
340 \fIjoinable\fR. This means that another thread can wait for the such
341 marked thread to exit and join it.
342 .PP
343 Restrictions: On some unix systems the pthread-library does not
344 contain the functionality to specify the stacksize of a thread. The
345 specified value for the stacksize is ignored on these systems. Both
346 Windows and Macintosh currently do not support joinable threads. This
347 flag value is therefore ignored on these platforms.
348 .VE
349 .PP
350 Tcl does provide \fBTcl_ExitThread\fR and \fBTcl_FinalizeThread\fR
351 for terminating threads and invoking optional per-thread exit
352 handlers.  See the \fBTcl_Exit\fR page for more information on these
353 procedures.
354 .PP
355 .VS
356 The \fBTcl_JoinThread\fR function is provided to allow threads to wait
357 upon the exit of another thread, which must have been marked as
358 joinable through usage of the \fBTCL_THREAD_JOINABLE\fR-flag during
359 its creation via \fBTcl_CreateThread\fR.
360 .PP
361 Trying to wait for the exit of a non-joinable thread or a thread which
362 is already waited upon will result in an error. Waiting for a joinable
363 thread which already exited is possible, the system will retain the
364 necessary information until after the call to \fBTcl_JoinThread\fR.
365 This means that not calling \fBTcl_JoinThread\fR for a joinable thread
366 will cause a memory leak.
367 .VE
368 .PP
369 Tcl provides \fBTcl_ThreadQueueEvent\fR and \fBTcl_ThreadAlert\fR
370 for handling event queueing in multithreaded applications.  See
371 the \fBNotifier\fR manual page for more information on these procedures.
372 .PP
373 In this release, the Tcl language itself provides no support for
374 creating multithreaded scripts (for example, scripts that could spawn
375 a Tcl interpreter in a separate thread).  If you need to add this
376 feature at this time, see the \fItclThreadTest.c\fR
377 file in the Tcl source distribution for an experimental implementation
378 of a Tcl "Thread" package implementing thread creation and management
379 commands at the script level.
380
381 .SH DESCRIPTION
382 A mutex is a lock that is used to serialize all threads through a piece
383 of code by calling \fBTcl_MutexLock\fR and \fBTcl_MutexUnlock\fR.
384 If one thread holds a mutex, any other thread calling \fBTcl_MutexLock\fR will
385 block until \fBTcl_MutexUnlock\fR is called.
386 .VS
387 A mutex can be destroyed after its use by calling \fBTcl_MutexFinalize\fR.
388 The result of locking a mutex twice from the same thread is undefined.
389 On some platforms it will result in a deadlock.
390 .VE
391 The \fBTcl_MutexLock\fR, \fBTcl_MutexUnlock\fR and \fBTcl_MutexFinalize\fR
392 procedures are defined as empty macros if not compiling with threads enabled.
393 .PP
394 A condition variable is used as a signaling mechanism:
395 a thread can lock a mutex and then wait on a condition variable
396 with \fBTcl_ConditionWait\fR.  This atomically releases the mutex lock
397 and blocks the waiting thread until another thread calls
398 \fBTcl_ConditionNotify\fR.  The caller of \fBTcl_ConditionNotify\fR should
399 have the associated mutex held by previously calling \fBTcl_MutexLock\fR,
400 but this is not enforced.  Notifying the
401 condition variable unblocks all threads waiting on the condition variable,
402 but they do not proceed until the mutex is released with \fBTcl_MutexUnlock\fR.
403 The implementation of \fBTcl_ConditionWait\fR automatically locks
404 the mutex before returning.
405 .PP
406 The caller of \fBTcl_ConditionWait\fR should be prepared for spurious
407 notifications by calling \fBTcl_ConditionWait\fR within a while loop
408 that tests some invariant.
409 .PP
410 .VS
411 A condition variable can be destroyed after its use by calling
412 \fBTcl_ConditionFinalize\fR.
413 .PP
414 The \fBTcl_ConditionNotify\fR, \fBTcl_ConditionWait\fR and
415 \fBTcl_ConditionFinalize\fR procedures are defined as empty macros if
416 not compiling with threads enabled.
417 .VE
418 .PP
419 The \fBTcl_GetThreadData\fR call returns a pointer to a block of
420 thread-private data.  Its argument is a key that is shared by all threads
421 and a size for the block of storage.  The storage is automatically 
422 allocated and initialized to all zeros the first time each thread asks for it.
423 The storage is automatically deallocated by \fBTcl_FinalizeThread\fR.
424 .SH INITIALIZATION
425 .PP
426 All of these synchronization objects are self initializing.
427 They are implemented as opaque pointers that should be NULL
428 upon first use.
429 The mutexes and condition variables are
430 .VS
431 either cleaned up by process exit handlers (if living that long) or
432 explicitly by calls to \fBTcl_MutexFinalize\fR or
433 \fBTcl_ConditionFinalize\fR.
434 .VE
435 Thread local storage is reclaimed during \fBTcl_FinalizeThread\fR.
436 .SH "CREATING THREADS"
437 The API to create threads is not finalized at this time.
438 There are private facilities to create threads that contain a new
439 Tcl interpreter, and to send scripts among threads.
440 Dive into tclThreadTest.c and tclThread.c for examples.
441 .SH "SEE ALSO"
442 Tcl_GetCurrentThread, Tcl_ThreadQueueEvent, Tcl_ThreadAlert,
443 Tcl_ExitThread, Tcl_FinalizeThread,
444 Tcl_CreateThreadExitHandler, Tcl_DeleteThreadExitHandler
445 .SH KEYWORDS
446 thread, mutex, condition variable, thread local storage