From 383e55e6bb725a01f652a9fb74f6103b2c789793 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Wed, 8 Dec 2021 13:31:20 +0200 Subject: Added some C11 atomic operations Mainly to be used in spinlocks etc. --- include/apos/lock.h | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 include/apos/lock.h (limited to 'include/apos/lock.h') diff --git a/include/apos/lock.h b/include/apos/lock.h new file mode 100644 index 0000000..b8983fa --- /dev/null +++ b/include/apos/lock.h @@ -0,0 +1,23 @@ +#ifndef LOCK_H +#define LOCK_H + +#include +typedef atomic_int spinlock_t; + +#include + +static inline void spin_lock(spinlock_t *lck) +{ + do { + while (atomic_load_explicit(lck, memory_order_acquire)) + optional_pause(); + + } while (atomic_exchange_explicit(lck, 1, memory_order_acq_rel)); +} + +static inline void spin_unlock(spinlock_t *lck) +{ + atomic_store_explicit(lck, 0, memory_order_release); +} + +#endif /* LOCK_H */ -- cgit v1.3