diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2021-12-08 13:31:20 +0200 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2021-12-08 13:31:20 +0200 |
| commit | 383e55e6bb725a01f652a9fb74f6103b2c789793 (patch) | |
| tree | d5ce2f92a5f5545a2203d4dbfbf9b8fd8caa7584 /include/apos/lock.h | |
| parent | 5c335752c4fb7e472d68b2b2731c3674a10cbd97 (diff) | |
| download | kmi-383e55e6bb725a01f652a9fb74f6103b2c789793.tar.gz kmi-383e55e6bb725a01f652a9fb74f6103b2c789793.zip | |
Added some C11 atomic operations
Mainly to be used in spinlocks etc.
Diffstat (limited to 'include/apos/lock.h')
| -rw-r--r-- | include/apos/lock.h | 23 |
1 files changed, 23 insertions, 0 deletions
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 <apos/atomic.h> +typedef atomic_int spinlock_t; + +#include <lock.h> + +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 */ |
