| 123456789101112131415161718192021222324252627282930313233 |
- #ifndef CX_ZIVUOS_MUTEX_H_INCLUDED
- #define CX_ZIVUOS_MUTEX_H_INCLUDED
- #include <stdint.h>
- #include <stdbool.h>
- typedef volatile enum zv_mutex_e {
- ZV_MUTEX_FREE,
- ZV_MUTEX_LOCKED
- } zv_mutex_t;
- static inline bool zv_mutex_try_lock(zv_mutex_t *self) {
- zv_mutex_t required = ZV_MUTEX_FREE;
- return __atomic_compare_exchange_n(
- self,
- &required,
- ZV_MUTEX_LOCKED,
- false,
- __ATOMIC_ACQ_REL,
- __ATOMIC_ACQUIRE
- );
- }
- static inline bool zv_mutex_is_free(zv_mutex_t *self) {
- return __atomic_load_n(self, __ATOMIC_ACQUIRE) == ZV_MUTEX_FREE;
- }
- static inline void zv_mutex_unlock(zv_mutex_t *self) {
- __atomic_store_n(self, ZV_MUTEX_FREE, __ATOMIC_RELEASE);
- }
- #endif
|