#ifndef SP_LOCK_H_ #define SP_LOCK_H_ /* * sophia database * sphia.org * * Copyright (c) Dmitry Simonenko * BSD License */ typedef uint8_t spspinlock; static inline void sp_lockinit(volatile spspinlock *l) { *l = 0; } static inline void sp_lockfree(volatile spspinlock *l) { *l = 0; } static inline void sp_lock(volatile spspinlock *l) { while (__sync_lock_test_and_set(l, 1)) {} } static inline void sp_unlock(volatile spspinlock *l) { __sync_lock_release(l); } #if 0 #include typedef pthread_spinlock_t spspinlock; static inline void sp_lockinit(volatile spspinlock *l) { pthread_spin_init(l, 0); } static inline void sp_lockfree(volatile spspinlock *l) { pthread_spin_destroy(l); } static inline void sp_lock(volatile spspinlock *l) { pthread_spin_lock(l); } static inline void sp_unlock(volatile spspinlock *l) { pthread_spin_unlock(l); } #endif #endif