this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

libsimple: Add `libsimple_lock_try_lock`

+15
+2
src/libsimple/include/libsimple/lock.h
··· 2 2 #define _LIBSIMPLE_LOCK_H_ 3 3 4 4 #include <stdint.h> 5 + #include <stdbool.h> 5 6 6 7 #include "base.h" 7 8 ··· 24 25 25 26 void libsimple_lock_lock(libsimple_lock_t* lock); 26 27 void libsimple_lock_unlock(libsimple_lock_t* lock); 28 + bool libsimple_lock_try_lock(libsimple_lock_t* lock); 27 29 28 30 // 29 31 // once
+13
src/libsimple/src/lock.c
··· 117 117 } 118 118 }; 119 119 120 + bool libsimple_lock_try_lock(libsimple_lock_t* _lock) { 121 + libsimple_lock_internal_t* lock = (libsimple_lock_internal_t*)_lock; 122 + uint32_t prev = cmpxchg_wrapper_u32(&lock->state, libsimple_lock_state_unlocked, libsimple_lock_state_locked_uncontended); 123 + 124 + if (prev == libsimple_lock_state_unlocked) { 125 + libsimple_lock_debug("(try) lock acquired"); 126 + } else { 127 + libsimple_lock_debug("(try) lock not acquired"); 128 + } 129 + 130 + return prev == libsimple_lock_state_unlocked; 131 + }; 132 + 120 133 // 121 134 // libsimple_once 122 135 //