#include #include #include "mutex.h" enum zv_mutex_e zv_mutex_create() { return ZV_MUTEX_FREE; } bool zv_mutex_try_lock(zv_mutex_t *self) { zv_mutex_t required = ZV_MUTEX_FREE; return __atomic_compare_exchange_n( self, (void *) &required, ZV_MUTEX_LOCKED, false, __ATOMIC_ACQ_REL, __ATOMIC_ACQUIRE ); } bool zv_mutex_is_free(zv_mutex_t *self) { return __atomic_load_n(self, __ATOMIC_ACQUIRE) == ZV_MUTEX_FREE; } void zv_mutex_unlock(zv_mutex_t *self) { __atomic_store_n(self, ZV_MUTEX_FREE, __ATOMIC_RELEASE); }