21#define RWMUTEX_READ_SCOPE(mutex) \
22 __attribute__((cleanup(rwmutex_read_cleanup))) rwmutex_t* CONCAT(rm, __COUNTER__) = (mutex); \
23 rwmutex_read_acquire((mutex))
30#define RWMUTEX_WRITE_SCOPE(mutex) \
31 __attribute__((cleanup(rwmutex_write_cleanup))) rwmutex_t* CONCAT(wm, __COUNTER__) = (mutex); \
32 rwmutex_write_acquire((mutex))
void rwmutex_write_acquire(rwmutex_t *mtx)
Acquires a rwmutex for writing, blocking until it is available.
void rwmutex_init(rwmutex_t *mtx)
Initializes a rwmutex.
uint64_t rwmutex_write_try_acquire(rwmutex_t *mtx)
Tries to acquire a rwmutex for writing.
void rwmutex_read_acquire(rwmutex_t *mtx)
Acquires a rwmutex for reading, blocking until it is available.
uint64_t rwmutex_read_try_acquire(rwmutex_t *mtx)
Tries to acquire a rwmutex for reading.
static void rwmutex_read_cleanup(rwmutex_t **mutex)
void rwmutex_read_release(rwmutex_t *mtx)
Releases a rwmutex from reading.
static void rwmutex_write_cleanup(rwmutex_t **mutex)
void rwmutex_deinit(rwmutex_t *mtx)
Deinitializes a rwmutex.
void rwmutex_write_release(rwmutex_t *mtx)
Releases a rwmutex from writing.
A simple ticket lock implementation.
Read-Write Mutex structure.