| 12345678910111213141516171819202122232425262728293031 |
- #include <stdint.h>
- #include <stdbool.h>
- #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);
- }
|