23#ifndef __KOS_SPINLOCK_H
24#define __KOS_SPINLOCK_H
29#if !defined(__cplusplus)
44#define SPINLOCK_INITIALIZER 0
71 return atomic_compare_exchange_strong_explicit(
138#define ___spinlock_lock_scoped(m, l) \
139 spinlock_t *__scoped_spinlock_##l __attribute__((cleanup(__spinlock_scoped_cleanup))) = (spinlock_lock(m), (m))
140#define __spinlock_lock_scoped(m, l) ___spinlock_lock_scoped(m, l)
151#define spinlock_lock_scoped(lock) \
152 __spinlock_lock_scoped((lock), __LINE__)
Various common macros used throughout the codebase.
static bool irq_inside_int(void)
Returns whether inside of an interrupt context.
Definition irq.h:137
void thd_pass(void)
Throw away the current thread's timeslice.
static void spinlock_unlock(spinlock_t *lock)
Free a lock.
Definition spinlock.h:116
static bool spinlock_trylock(spinlock_t *lock)
Try to lock, without spinning.
Definition spinlock.h:69
static void spinlock_init(spinlock_t *lock)
Initialize a spinlock.
Definition spinlock.h:53
static bool spinlock_is_locked(const spinlock_t *lock)
Determine if a lock is locked.
Definition spinlock.h:129
#define SPINLOCK_INITIALIZER
Spinlock initializer.
Definition spinlock.h:44
volatile int spinlock_t
Spinlock data type.
Definition spinlock.h:37
static void spinlock_lock(spinlock_t *lock)
Spin on a lock.
Definition spinlock.h:87
static bool spinlock_lock_irqsafe(spinlock_t *lock)
Spin on a lock.
Definition spinlock.h:101
static mutex_t lock
Definition once_test.c:30