SDL Library
SDL_mutex.h File Reference
Functions to provide thread synchronization primitives. More...
Go to the source code of this file.
Mutex functions | |
typedef struct SDL_mutex | SDL_mutex |
DECLSPEC SDL_mutex *SDLCALL | SDL_CreateMutex (void) |
Create a mutex, initialized unlocked. | |
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) |
DECLSPEC void SDLCALL | SDL_DestroyMutex (SDL_mutex *mutex) |
Destroy a mutex. | |
Semaphore functions | |
typedef struct SDL_semaphore | SDL_sem |
DECLSPEC SDL_sem *SDLCALL | SDL_CreateSemaphore (Uint32 initial_value) |
Create a semaphore, initialized with value, returns NULL on failure. | |
DECLSPEC void SDLCALL | SDL_DestroySemaphore (SDL_sem *sem) |
Destroy a semaphore. | |
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. | |
DECLSPEC int SDLCALL | SDL_SemTryWait (SDL_sem *sem) |
Non-blocking variant of SDL_SemWait(). | |
DECLSPEC int SDLCALL | SDL_SemWaitTimeout (SDL_sem *sem, Uint32 ms) |
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). | |
DECLSPEC Uint32 SDLCALL | SDL_SemValue (SDL_sem *sem) |
Returns the current count of the semaphore. | |
Condition variable functions | |
typedef struct SDL_cond | SDL_cond |
DECLSPEC SDL_cond *SDLCALL | SDL_CreateCond (void) |
Create a condition variable. | |
DECLSPEC void SDLCALL | SDL_DestroyCond (SDL_cond *cond) |
Destroy a condition variable. | |
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. | |
DECLSPEC int SDLCALL | SDL_CondWait (SDL_cond *cond, SDL_mutex *mutex) |
Wait on the condition variable, unlocking the provided mutex. | |
DECLSPEC int SDLCALL | SDL_CondWaitTimeout (SDL_cond *cond, SDL_mutex *mutex, Uint32 ms) |
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. |
Detailed Description
Functions to provide thread synchronization primitives.
Definition in file SDL_mutex.h.
Function Documentation
DECLSPEC int SDLCALL SDL_CondBroadcast | ( | SDL_cond * | cond ) |
Restart all threads that are waiting on the condition variable.
- Returns:
- 0 or -1 on error.
DECLSPEC int SDLCALL SDL_CondSignal | ( | SDL_cond * | cond ) |
Restart one of the threads that are waiting on the condition variable.
- Returns:
- 0 or -1 on error.
DECLSPEC int SDLCALL SDL_CondWait | ( | SDL_cond * | cond, |
SDL_mutex * | mutex | ||
) |
Wait on the condition variable, unlocking the provided mutex.
- Warning:
- The mutex must be locked before entering this function!
The mutex is re-locked once the condition variable is signaled.
- Returns:
- 0 when it is signaled, or -1 on error.
DECLSPEC int SDLCALL SDL_CondWaitTimeout | ( | SDL_cond * | cond, |
SDL_mutex * | mutex, | ||
Uint32 | ms | ||
) |
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.
- Warning:
- On some platforms this function is implemented by looping with a delay of 1 ms, and so should be avoided if possible.
DECLSPEC SDL_cond* SDLCALL SDL_CreateCond | ( | void | ) |
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 SDL_mutex* SDLCALL SDL_CreateMutex | ( | void | ) |
Create a mutex, initialized unlocked.
DECLSPEC SDL_sem* SDLCALL SDL_CreateSemaphore | ( | Uint32 | initial_value ) |
Create a semaphore, initialized with value, returns NULL on failure.
DECLSPEC void SDLCALL SDL_DestroyCond | ( | SDL_cond * | cond ) |
Destroy a condition variable.
DECLSPEC void SDLCALL SDL_DestroyMutex | ( | SDL_mutex * | mutex ) |
Destroy a mutex.
DECLSPEC void SDLCALL SDL_DestroySemaphore | ( | SDL_sem * | sem ) |
Destroy a semaphore.
DECLSPEC int SDLCALL SDL_SemPost | ( | SDL_sem * | sem ) |
Atomically increases the semaphore's count (not blocking).
- Returns:
- 0, or -1 on error.
DECLSPEC int SDLCALL SDL_SemTryWait | ( | SDL_sem * | sem ) |
Non-blocking variant of SDL_SemWait().
- Returns:
- 0 if the wait succeeds, SDL_MUTEX_TIMEDOUT if the wait would block, and -1 on error.
DECLSPEC Uint32 SDLCALL SDL_SemValue | ( | SDL_sem * | sem ) |
Returns the current count of the semaphore.
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_SemWaitTimeout | ( | SDL_sem * | sem, |
Uint32 | ms | ||
) |
Variant of SDL_SemWait() with a timeout in milliseconds.
- Returns:
- 0 if the wait succeeds, SDL_MUTEX_TIMEDOUT if the wait does not succeed in the allotted time, and -1 on error.
- Warning:
- On some platforms this function is implemented by looping with a delay of 1 ms, and so should be avoided if possible.
DECLSPEC int SDLCALL SDL_TryLockMutex | ( | SDL_mutex * | mutex ) |
Try to lock the mutex.
- Returns:
- 0, SDL_MUTEX_TIMEDOUT, or -1 on error
Generated on Tue Jul 12 2022 15:10:21 by 1.7.2