Reader writer lock
include/sync/rwlock.h View source View on GitHubStructs
Section titled “Structs”rwlock
Section titled “rwlock”struct rwlock {
_Atomic (uintptr_t) lock_word;
}; rwlock_acquire_type
Section titled “rwlock_acquire_type”enum rwlock_acquire_type {
RWLOCK_ACQUIRE_READ = 0,
RWLOCK_ACQUIRE_WRITE = 1,
}; Functions
Section titled “Functions”rwlock_lock
Section titled “rwlock_lock”void rwlock_lock(struct rwlock *lock, enum rwlock_acquire_type type); rwlock_unlock
Section titled “rwlock_unlock”void rwlock_unlock(struct rwlock *lock); rwlock_init
Section titled “rwlock_init”void rwlock_init(struct rwlock *lock, enum thread_prio_class ceiling); rwlock_held
Section titled “rwlock_held”bool rwlock_held(struct rwlock *lock, enum rwlock_acquire_type type); rwlock_read_lock
Section titled “rwlock_read_lock”void rwlock_read_lock(struct rwlock *lock); rwlock_write_lock
Section titled “rwlock_write_lock”void rwlock_write_lock(struct rwlock *lock); Macros
Section titled “Macros”RWLOCK_ASSERT_HELD
Section titled “RWLOCK_ASSERT_HELD”#define RWLOCK_ASSERT_HELD(lock, type) \
kassert(rwlock_held((lock), (type)), "rwlock not held") RWLOCK_ASSERT_READ
Section titled “RWLOCK_ASSERT_READ”#define RWLOCK_ASSERT_READ(lock) RWLOCK_ASSERT_HELD((lock), RWLOCK_ACQUIRE_READ) RWLOCK_ASSERT_WRITE
Section titled “RWLOCK_ASSERT_WRITE”#define RWLOCK_ASSERT_WRITE(lock) \
RWLOCK_ASSERT_HELD((lock), RWLOCK_ACQUIRE_WRITE) RWLOCK_PRIO_CEIL_SHIFT
Section titled “RWLOCK_PRIO_CEIL_SHIFT”#define RWLOCK_PRIO_CEIL_SHIFT (1) RWLOCK_INIT
Section titled “RWLOCK_INIT”#define RWLOCK_INIT(ceil) {((ceil) << RWLOCK_PRIO_CEIL_SHIFT)}