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