37#if defined(__x86_64__) || defined(__i386__)
52 std::atomic<int> state;
73static inline void cpu_relax(
void) {
74#if defined(__x86_64__) || defined(__i386__)
76#elif defined(__aarch64__) || defined(__arm__)
77 __asm__
volatile(
"yield");
102 new (&l->state) std::atomic<int>(0);
104 atomic_init(&l->state, 0);
136 int state = l->state.load(std::memory_order_relaxed);
138 int state = atomic_load_explicit(&l->state, memory_order_relaxed);
145 if (l->state.compare_exchange_weak(state, state + 1, std::memory_order_acquire, std::memory_order_relaxed))
147 if (atomic_compare_exchange_weak_explicit(&l->state, &state, state + 1, memory_order_acquire,
148 memory_order_relaxed))
180 l->state.fetch_sub(1, std::memory_order_release);
182 atomic_fetch_sub_explicit(&l->state, 1, memory_order_release);
216 if (l->state.compare_exchange_weak(expected, -1, std::memory_order_acquire, std::memory_order_relaxed))
218 if (atomic_compare_exchange_weak_explicit(&l->state, &expected, -1, memory_order_acquire, memory_order_relaxed))
250 l->state.store(0, std::memory_order_release);
252 atomic_store_explicit(&l->state, 0, memory_order_release);
Reader-writer spinlock structure.