24 #include <core/threading/spinlock.h>
25 #include <core/threading/thread.h>
26 #include <core/exception.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;
75 spinlock_data =
new SpinlockData();
76 #ifdef USE_POSIX_SPIN_LOCKS
77 pthread_spin_init(&(spinlock_data->spinlock), PTHREAD_PROCESS_PRIVATE);
84 #ifdef USE_POSIX_SPIN_LOCKS
85 pthread_spin_destroy(&(spinlock_data->spinlock));
99 #ifdef USE_POSIX_SPIN_LOCKS
101 if ( (err = pthread_spin_lock(&(spinlock_data->spinlock))) != 0 ) {
107 locked = spinlock_data->mutex.try_lock();
133 #ifdef USE_POSIX_SPIN_LOCKS
134 if (pthread_spin_trylock(&(spinlock_data->spinlock)) == 0) {
140 return spinlock_data->mutex.try_lock();
149 #ifdef USE_POSIX_SPIN_LOCKS
150 pthread_spin_unlock(&(spinlock_data->spinlock));
152 spinlock_data->mutex.unlock();