#ifndef __USER_LIBS_LOCK_H__ #define __USER_LIBS_LOCK_H__ #include #include #include #define INIT_LOCK {0} typedef volatile bool lock_t; static inline void lock_init(lock_t *l) { *l = 0; } static inline bool try_lock(lock_t *l) { return test_and_set_bit(0, l); } static inline void lock(lock_t *l) { if (try_lock(l)) { int step = 0; do { yield(); if (++ step == 100) { step = 0; sleep(10); } } while (try_lock(l)); } } static inline void unlock(lock_t *l) { test_and_clear_bit(0, l); } #endif /* !__USER_LIBS_LOCK_H__ */