>Multi-threaded Programming<
/TITLE
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.64
REL="HOME"
TITLE="SDL Library Documentation"
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"
NAME="KEYWORD"
CONTENT="function"><
/HEAD
CLASS="CHAPTER"
BGCOLOR="#FFF8DC"
TEXT="#000000"
LINK="#0000ee"
VLINK="#551a8b"
ALINK="#ff0000"
CLASS="NAVHEADER"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
COLSPAN="3"
ALIGN="center"
>SDL Library Documentation<
/TH
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
HREF="sdlcdtrack.html"
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
HREF="sdlcreatethread.html"
ALIGN="LEFT"
CLASS="CHAPTER"
NAME="THREAD"
>Chapter
12. Multi-threaded Programming<
/A
CLASS="TOC"
HREF="sdlcreatethread.html"
> — Creates a new thread of execution that shares its parent's properties.</DT
><DT
><A
HREF="sdlthreadid.html"
>SDL_ThreadID</A
> — Get the 32-bit thread identifier for the current thread.</DT
><DT
><A
HREF="sdlgetthreadid.html"
>SDL_GetThreadID</A
> — Get the SDL thread ID of a SDL_Thread</DT
><DT
><A
HREF="sdlwaitthread.html"
>SDL_WaitThread</A
> — Wait for a thread to finish.</DT
><DT
><A
HREF="sdlkillthread.html"
>SDL_KillThread</A
> — Gracelessly terminates the thread.</DT
><DT
><A
HREF="sdlcreatemutex.html"
>SDL_CreateMutex</A
> — Create a mutex</DT
><DT
><A
HREF="sdldestroymutex.html"
>SDL_DestroyMutex</A
> — Destroy a mutex</DT
><DT
><A
HREF="sdlmutexp.html"
>SDL_mutexP</A
> — Lock a mutex</DT
><DT
><A
HREF="sdlmutexv.html"
>SDL_mutexV</A
> — Unlock a mutex</DT
><DT
><A
HREF="sdlcreatesemaphore.html"
>SDL_CreateSemaphore</A
> — Creates a new semaphore and assigns an initial value to it.</DT
><DT
><A
HREF="sdldestroysemaphore.html"
>SDL_DestroySemaphore</A
> — Destroys a semaphore that was created by <A
HREF="sdlcreatesemaphore.html"
>SDL_CreateSemaphore</A
>.</DT
><DT
><A
HREF="sdlsemwait.html"
>SDL_SemWait</A
> — Lock a semaphore and suspend the thread if the semaphore value is zero.</DT
><DT
><A
HREF="sdlsemtrywait.html"
>SDL_SemTryWait</A
> — Attempt to lock a semaphore but don't suspend the thread.<
/DT
HREF="sdlsemwaittimeout.html"
> &#
8212; Lock a semaphore, but only wait up to a specified maximum time.<
/DT
HREF="sdlsempost.html"
> &#
8212; Unlock a semaphore.<
/DT
HREF="sdlsemvalue.html"
> &#
8212; Return the current
value of a semaphore.<
/DT
HREF="sdlcreatecond.html"
> &#
8212; Create a condition variable<
/DT
HREF="sdldestroycond.html"
> &#
8212; Destroy a condition variable<
/DT
HREF="sdlcondsignal.html"
> &#
8212; Restart a thread wait on a condition variable<
/DT
HREF="sdlcondbroadcast.html"
> &#
8212; Restart all threads waiting on a condition variable<
/DT
HREF="sdlcondwait.html"
> &#
8212; Wait on a condition variable<
/DT
HREF="sdlcondwaittimeout.html"
> &#
8212; Wait on a condition variable, with timeout<
/DT
>SDL provides functions
for creating threads, mutexes, semphores and condition variables.<
/P
>In general, you must be very aware of concurrency and data integrity issues
when writing multi-threaded programs. Some good guidelines include:
>Don't call SDL video/event functions from separate threads</P
></LI
><LI
><P
>Don't use any library functions in separate threads<
/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
>SDL's threading is not implemented on MacOS, due to that lack of preemptive thread support
(eck!
)<
/P
CLASS="NAVFOOTER"
ALIGN="LEFT"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
WIDTH="33%"
ALIGN="left"
VALIGN="top"
HREF="sdlcdtrack.html"
WIDTH="34%"
ALIGN="center"
VALIGN="top"
HREF="index.html"
WIDTH="33%"
ALIGN="right"
VALIGN="top"
HREF="sdlcreatethread.html"
WIDTH="33%"
ALIGN="left"
VALIGN="top"
WIDTH="34%"
ALIGN="center"
VALIGN="top"
HREF="reference.html"
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>