40#define SEQLOCK_CREATE {.sequence = ATOMIC_VAR_INIT(0), .writeLock = LOCK_CREATE}
static void lock_init(lock_t *lock)
Initializes a lock.
static void lock_release(lock_t *lock)
Releases a lock.
static void lock_acquire(lock_t *lock)
Acquires a lock, blocking until it is available.
static uint64_t seqlock_read_begin(seqlock_t *seqlock)
Begins a read operation on a sequence lock.
static void seqlock_write_release(seqlock_t *seqlock)
Releases the write lock of a sequence lock.
static bool seqlock_read_retry(seqlock_t *seqlock, uint64_t seq)
Checks if a read operation on a sequence lock needs to be retried.
static void seqlock_init(seqlock_t *seqlock)
Initializes a sequence lock.
static void seqlock_write_acquire(seqlock_t *seqlock)
Acquires the write lock of a sequence lock.
#define atomic_fetch_add_explicit(object, operand, order)
#define atomic_load_explicit(object, order)
#define atomic_thread_fence(order)
#define atomic_init(obj, value)
A simple ticket lock implementation.