Create a semaphore.
Defined in <SDL3/SDL_mutex.h>
SDL_Semaphore * SDL_CreateSemaphore(Uint32 initial_value);| Uint32 | initial_value | the starting value of the semaphore. |
(SDL_Semaphore *) Returns a new semaphore or NULL on failure; call SDL_GetError() for more information.
This function creates a new semaphore and initializes it with the
value initial_value. Each wait operation on the semaphore
will atomically decrement the semaphore value and potentially block if
the semaphore value is 0. Each post operation will atomically increment
the semaphore value and wake waiting threads and allow them to retry the
wait operation.
This function is available since SDL 3.2.0.
Typical use of semaphores:
void add_data_to_queue(void);
void get_data_from_queue(void);
int data_available(void);
void wait_for_threads(void);
SDL_AtomicInt done;
SDL_Semaphore *sem;
SDL_SetAtomicInt(&done, 0);
sem = SDL_CreateSemaphore(0);
Thread_A:
while (!SDL_GetAtomicInt(&done)) {
add_data_to_queue();
SDL_SignalSemaphore(sem);
}
Thread_B:
while (!SDL_GetAtomicInt(&done)) {
SDL_WaitSemaphore(sem);
if (data_available()) {
get_data_from_queue();
}
}
SDL_SetAtomicInt(&done, 1);
SDL_SignalSemaphore(sem);
wait_for_threads();
SDL_DestroySemaphore(sem);