CVS update (semaphores, CVs)

The latest CVS snapshot has support for semaphores and condition variables:
http://www.devolution.com/~slouken/SDL/cvs.html

Please test this code as thoroughly as you can. I haven’t updated the
VC++ projects yet to include the new files, but other platforms should
work.

The condition variable implementation is written on top of semaphores,
and I don’t have any code to thoroughly exercise it, so if you have any,
please let me know!

From the WhatsNew file:
Added condition variable support, based on mutexes and semaphores
if native condition variables are not available.
SDL_CreateCond()
SDL_DestroyCond()
SDL_CondSignal()
SDL_CondBroadcast()
SDL_CondWait()
SDL_CondTimedWait()
The new function prototypes are in SDL_mutex.h

    Added semaphore support, based on mutexes and condition variables
    if native semaphores are not available.
            SDL_CreateSemaphore()
            SDL_DestroySemaphore()
            SDL_SemWait()
            SDL_SemTryWait()
            SDL_SemWaitTimeout()
            SDL_SemPost()
            SDL_SemValue()
    The new function prototypes are in SDL_mutex.h

Mutexes are now recursive, meaning you can do the following:
SDL_LockMutex(lock);

SDL_LockMutex(lock); <-- recursive lock, doesn’t deadlock

SDL_UnlockMutex(lock);

SDL_UnlockMutex(lock); <-- lock is released

This may go away, as it introduces a bit of overhead in checking lock
ownership. I’m curious if people want to keep them or not?

Enjoy!
-Sam Lantinga, Lead Programmer, Loki Entertainment Software