World of Might and Magic
0.2.0
Open reimplementation of Might and Magic 6 7 8 game engine
|
Mutex functions | |
typedef struct SDL_mutex | SDL_mutex |
DECLSPEC SDL_mutex *SDLCALL | SDL_CreateMutex (void) |
DECLSPEC int SDLCALL | SDL_LockMutex (SDL_mutex *mutex) |
DECLSPEC int SDLCALL | SDL_TryLockMutex (SDL_mutex *mutex) |
DECLSPEC int SDLCALL | SDL_UnlockMutex (SDL_mutex *mutex) |
DECLSPEC void SDLCALL | SDL_DestroyMutex (SDL_mutex *mutex) |
Semaphore functions | |
typedef struct SDL_semaphore | SDL_sem |
DECLSPEC SDL_sem *SDLCALL | SDL_CreateSemaphore (Uint32 initial_value) |
DECLSPEC void SDLCALL | SDL_DestroySemaphore (SDL_sem *sem) |
DECLSPEC int SDLCALL | SDL_SemWait (SDL_sem *sem) |
DECLSPEC int SDLCALL | SDL_SemTryWait (SDL_sem *sem) |
DECLSPEC int SDLCALL | SDL_SemWaitTimeout (SDL_sem *sem, Uint32 ms) |
DECLSPEC int SDLCALL | SDL_SemPost (SDL_sem *sem) |
DECLSPEC Uint32 SDLCALL | SDL_SemValue (SDL_sem *sem) |
Condition variable functions | |
typedef struct SDL_cond | SDL_cond |
DECLSPEC SDL_cond *SDLCALL | SDL_CreateCond (void) |
DECLSPEC void SDLCALL | SDL_DestroyCond (SDL_cond *cond) |
DECLSPEC int SDLCALL | SDL_CondSignal (SDL_cond *cond) |
DECLSPEC int SDLCALL | SDL_CondBroadcast (SDL_cond *cond) |
DECLSPEC int SDLCALL | SDL_CondWait (SDL_cond *cond, SDL_mutex *mutex) |
DECLSPEC int SDLCALL | SDL_CondWaitTimeout (SDL_cond *cond, SDL_mutex *mutex, Uint32 ms) |
Functions to provide thread synchronization primitives.
См. определение в файле SDL_mutex.h
См. определение в файле SDL_mutex.h строка 59
typedef struct SDL_semaphore SDL_sem |
См. определение в файле SDL_mutex.h строка 107
См. определение в файле SDL_mutex.h строка 167
DECLSPEC int SDLCALL SDL_LockMutex | ( | SDL_mutex * | mutex | ) |
DECLSPEC int SDLCALL SDL_TryLockMutex | ( | SDL_mutex * | mutex | ) |
Try to lock the mutex
DECLSPEC int SDLCALL SDL_UnlockMutex | ( | SDL_mutex * | mutex | ) |
Create a semaphore, initialized with value, returns NULL on failure.
DECLSPEC int SDLCALL SDL_SemWait | ( | SDL_sem * | sem | ) |
This function suspends the calling thread until the semaphore pointed to by sem
has a positive count. It then atomically decreases the semaphore count.
DECLSPEC int SDLCALL SDL_SemTryWait | ( | SDL_sem * | sem | ) |
Non-blocking variant of SDL_SemWait().
Variant of SDL_SemWait() with a timeout in milliseconds.
DECLSPEC int SDLCALL SDL_SemPost | ( | SDL_sem * | sem | ) |
Atomically increases the semaphore's count (not blocking).
Create a condition variable.
Typical use of condition variables:
Thread A: SDL_LockMutex(lock); while ( ! condition ) { SDL_CondWait(cond, lock); } SDL_UnlockMutex(lock);
Thread B: SDL_LockMutex(lock); ... condition = true; ... SDL_CondSignal(cond); SDL_UnlockMutex(lock);
There is some discussion whether to signal the condition variable with the mutex locked or not. There is some potential performance benefit to unlocking first on some platforms, but there are some potential race conditions depending on how your code is structured.
In general it's safer to signal the condition variable while the mutex is locked.
DECLSPEC int SDLCALL SDL_CondSignal | ( | SDL_cond * | cond | ) |
Restart one of the threads that are waiting on the condition variable.
DECLSPEC int SDLCALL SDL_CondBroadcast | ( | SDL_cond * | cond | ) |
Restart all threads that are waiting on the condition variable.
Wait on the condition variable, unlocking the provided mutex.
The mutex is re-locked once the condition variable is signaled.
Waits for at most ms
milliseconds, and returns 0 if the condition variable is signaled, ::SDL_MUTEX_TIMEDOUT if the condition is not signaled in the allotted time, and -1 on error.