sdlCreateRwLock function

Pointer<SdlRwLock> sdlCreateRwLock()

Create a new read/write lock.

A read/write lock is useful for situations where you have multiple threads trying to access a resource that is rarely updated. All threads requesting a read-only lock will be allowed to run in parallel; if a thread requests a write lock, it will be provided exclusive access. This makes it safe for multiple threads to use a resource at the same time if they promise not to change it, and when it has to be changed, the rwlock will serve as a gateway to make sure those changes can be made safely.

In the right situation, a rwlock can be more efficient than a mutex, which only lets a single thread proceed at a time, even if it won't be modifying the data.

All newly-created read/write locks begin in the unlocked state.

Calls to SDL_LockRWLockForReading() and SDL_LockRWLockForWriting will not return while the rwlock is locked for writing by another thread. See SDL_TryLockRWLockForReading() and SDL_TryLockRWLockForWriting() to attempt to lock without blocking.

SDL read/write locks are only recursive for read-only locks! They are not guaranteed to be fair, or provide access in a FIFO manner! They are not guaranteed to favor writers. You may not lock a rwlock for both read-only and write access at the same time from the same thread (so you can't promote your read-only lock to a write lock without unlocking first).

\returns the initialized and unlocked read/write lock or NULL on failure; call SDL_GetError() for more information.

\since This function is available since SDL 3.1.3.

\sa SDL_DestroyRWLock \sa SDL_LockRWLockForReading \sa SDL_LockRWLockForWriting \sa SDL_TryLockRWLockForReading \sa SDL_TryLockRWLockForWriting \sa SDL_UnlockRWLock

extern SDL_DECLSPEC SDL_RWLock * SDLCALL SDL_CreateRWLock(void)

Implementation

Pointer<SdlRwLock> sdlCreateRwLock() {
  final sdlCreateRwLockLookupFunction = libSdl3.lookupFunction<
      Pointer<SdlRwLock> Function(),
      Pointer<SdlRwLock> Function()>('SDL_CreateRWLock');
  return sdlCreateRwLockLookupFunction();
}