/
thread.html
313 lines (313 loc) · 5.42 KB
1
2
3
4
5
6
<HTML
><HEAD
><TITLE
>Multi-threaded Programming</TITLE
><META
NAME="GENERATOR"
7
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
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
"><LINK
REL="HOME"
TITLE="SDL Library Documentation"
HREF="index.html"><LINK
REL="UP"
TITLE="SDL Reference"
HREF="reference.html"><LINK
REL="PREVIOUS"
TITLE="SDL_CDtrack"
HREF="sdlcdtrack.html"><LINK
REL="NEXT"
TITLE="SDL_CreateThread"
HREF="sdlcreatethread.html"><META
NAME="KEYWORD"
CONTENT="threads"><META
NAME="KEYWORD"
CONTENT="function"></HEAD
><BODY
CLASS="CHAPTER"
BGCOLOR="#FFF8DC"
TEXT="#000000"
LINK="#0000ee"
VLINK="#551a8b"
ALINK="#ff0000"
><DIV
CLASS="NAVHEADER"
><TABLE
35
SUMMARY="Header navigation table"
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>SDL Library Documentation</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="sdlcdtrack.html"
53
ACCESSKEY="P"
54
55
56
57
58
59
60
61
62
63
64
65
66
>Prev</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="sdlcreatethread.html"
67
ACCESSKEY="N"
68
69
70
71
72
73
74
75
76
77
78
79
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="CHAPTER"
><H1
><A
NAME="THREAD"
80
81
></A
>Chapter 12. Multi-threaded Programming</H1
82
83
84
85
86
87
88
89
90
91
92
><DIV
CLASS="TOC"
><DL
><DT
><B
>Table of Contents</B
></DT
><DT
><A
HREF="sdlcreatethread.html"
>SDL_CreateThread</A
93
> -- Creates a new thread of execution that shares its parent's properties.</DT
94
95
96
97
><DT
><A
HREF="sdlthreadid.html"
>SDL_ThreadID</A
98
> -- Get the 32-bit thread identifier for the current thread.</DT
99
100
101
102
><DT
><A
HREF="sdlgetthreadid.html"
>SDL_GetThreadID</A
103
> -- Get the SDL thread ID of a SDL_Thread</DT
104
105
106
107
><DT
><A
HREF="sdlwaitthread.html"
>SDL_WaitThread</A
108
> -- Wait for a thread to finish.</DT
109
110
111
112
><DT
><A
HREF="sdlkillthread.html"
>SDL_KillThread</A
113
> -- Gracelessly terminates the thread.</DT
114
115
116
117
><DT
><A
HREF="sdlcreatemutex.html"
>SDL_CreateMutex</A
118
> -- Create a mutex</DT
119
120
121
122
><DT
><A
HREF="sdldestroymutex.html"
>SDL_DestroyMutex</A
123
> -- Destroy a mutex</DT
124
125
126
127
><DT
><A
HREF="sdlmutexp.html"
>SDL_mutexP</A
128
> -- Lock a mutex</DT
129
130
131
132
><DT
><A
HREF="sdlmutexv.html"
>SDL_mutexV</A
133
> -- Unlock a mutex</DT
134
135
136
137
><DT
><A
HREF="sdlcreatesemaphore.html"
>SDL_CreateSemaphore</A
138
> -- Creates a new semaphore and assigns an initial value to it.</DT
139
140
141
142
><DT
><A
HREF="sdldestroysemaphore.html"
>SDL_DestroySemaphore</A
143
> -- Destroys a semaphore that was created by <A
144
145
146
147
148
149
150
HREF="sdlcreatesemaphore.html"
>SDL_CreateSemaphore</A
>.</DT
><DT
><A
HREF="sdlsemwait.html"
>SDL_SemWait</A
151
> -- Lock a semaphore and suspend the thread if the semaphore value is zero.</DT
152
153
154
155
><DT
><A
HREF="sdlsemtrywait.html"
>SDL_SemTryWait</A
156
> -- Attempt to lock a semaphore but don't suspend the thread.</DT
157
158
159
160
><DT
><A
HREF="sdlsemwaittimeout.html"
>SDL_SemWaitTimeout</A
161
> -- Lock a semaphore, but only wait up to a specified maximum time.</DT
162
163
164
165
><DT
><A
HREF="sdlsempost.html"
>SDL_SemPost</A
166
> -- Unlock a semaphore.</DT
167
168
169
170
><DT
><A
HREF="sdlsemvalue.html"
>SDL_SemValue</A
171
> -- Return the current value of a semaphore.</DT
172
173
174
175
><DT
><A
HREF="sdlcreatecond.html"
>SDL_CreateCond</A
176
> -- Create a condition variable</DT
177
178
179
180
><DT
><A
HREF="sdldestroycond.html"
>SDL_DestroyCond</A
181
> -- Destroy a condition variable</DT
182
183
184
185
><DT
><A
HREF="sdlcondsignal.html"
>SDL_CondSignal</A
186
> -- Restart a thread wait on a condition variable</DT
187
188
189
190
><DT
><A
HREF="sdlcondbroadcast.html"
>SDL_CondBroadcast</A
191
> -- Restart all threads waiting on a condition variable</DT
192
193
194
195
><DT
><A
HREF="sdlcondwait.html"
>SDL_CondWait</A
196
> -- Wait on a condition variable</DT
197
198
199
200
><DT
><A
HREF="sdlcondwaittimeout.html"
>SDL_CondWaitTimeout</A
201
> -- Wait on a condition variable, with timeout</DT
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
></DL
></DIV
><P
>SDL provides functions for creating threads, mutexes, semphores and condition variables.</P
><P
>In general, you must be very aware of concurrency and data integrity issues
when writing multi-threaded programs. Some good guidelines include:
<P
></P
><UL
><LI
><P
>Don't call SDL video/event functions from separate threads</P
></LI
><LI
><P
>Don't use any library functions in separate threads</P
></LI
><LI
><P
>Don't perform any memory management in separate threads</P
></LI
><LI
><P
>Lock global variables which may be accessed by multiple threads</P
></LI
><LI
><P
>Never terminate threads, always set a flag and wait for them to quit</P
></LI
><LI
><P
>Think very carefully about all possible ways your code may interact</P
></LI
></UL
></P
><DIV
CLASS="NOTE"
><BLOCKQUOTE
CLASS="NOTE"
><P
><B
>Note: </B
245
>SDL's threading is not implemented on MacOS, due to that lack of preemptive thread support (Mac OS X dos nt suffer from this problem)</P
246
247
248
249
250
251
252
253
></BLOCKQUOTE
></DIV
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
254
SUMMARY="Footer navigation table"
255
256
257
258
259
260
261
262
263
264
265
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="sdlcdtrack.html"
266
ACCESSKEY="P"
267
268
269
270
271
272
273
274
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
275
ACCESSKEY="H"
276
277
278
279
280
281
282
283
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="sdlcreatethread.html"
284
ACCESSKEY="N"
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>SDL_CDtrack</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="reference.html"
300
ACCESSKEY="U"
301
302
303
304
305
306
307
308
309
310
311
312
313
>Up</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>SDL_CreateThread</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>