24 #include <core/exception.h>
25 #include <core/threading/spinlock.h>
26 #include <core/threading/thread.h>
32 #if defined(_POSIX_SPIN_LOCKS) && (_POSIX_SPIN_LOCKS - 200112L) >= 0
33 # define USE_POSIX_SPIN_LOCKS
35 # undef USE_POSIX_SPIN_LOCKS
36 # include <core/threading/mutex.h>
63 #ifdef USE_POSIX_SPIN_LOCKS
64 pthread_spinlock_t spinlock;
74 spinlock_data =
new SpinlockData();
75 #ifdef USE_POSIX_SPIN_LOCKS
76 pthread_spin_init(&(spinlock_data->spinlock), PTHREAD_PROCESS_PRIVATE);
83 #ifdef USE_POSIX_SPIN_LOCKS
84 pthread_spin_destroy(&(spinlock_data->spinlock));
97 #ifdef USE_POSIX_SPIN_LOCKS
99 if ((err = pthread_spin_lock(&(spinlock_data->spinlock))) != 0) {
105 locked = spinlock_data->mutex.try_lock();
130 #ifdef USE_POSIX_SPIN_LOCKS
131 if (pthread_spin_trylock(&(spinlock_data->spinlock)) == 0) {
137 return spinlock_data->mutex.try_lock();
145 #ifdef USE_POSIX_SPIN_LOCKS
146 pthread_spin_unlock(&(spinlock_data->spinlock));
148 spinlock_data->mutex.unlock();