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