SDL_CreateSemaphore() creates a new semaphore and initializes it with the value initial_value. Each locking
operation on the semaphore by SDL_SemWait, SDL_SemTryWait or SDL_SemWaitTimeout will atomically decrement the
semaphore value. The locking operation will be blocked if the semaphore value is not positive (greater than
zero). Each unlock operation by SDL_SemPost will atomically increment the semaphore value.
Returns a pointer to an initialized semaphore or NULL if there was an error.