1 2 /* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) NGINX, Inc. 5 */ 6 7 #ifndef _NXT_UNIX_SPINLOCK_H_INCLUDED_ 8 #define _NXT_UNIX_SPINLOCK_H_INCLUDED_ 9 10 11 #if (NXT_THREADS) 12 13 #if (NXT_HAVE_MACOSX_SPINLOCK) 14 15 #include <libkern/OSAtomic.h> 16 17 typedef OSSpinLock nxt_thread_spinlock_t; 18 19 #define \ 20 nxt_thread_spin_init(ncpu, count) 21 22 #else 23 24 typedef nxt_atomic_t nxt_thread_spinlock_t; 25 26 NXT_EXPORT void nxt_thread_spin_init(nxt_uint_t ncpu, nxt_uint_t count); 27 28 #endif 29 30 31 NXT_EXPORT void nxt_thread_spin_lock(nxt_thread_spinlock_t *lock); 32 NXT_EXPORT nxt_bool_t nxt_thread_spin_trylock(nxt_thread_spinlock_t *lock); 33 NXT_EXPORT void nxt_thread_spin_unlock(nxt_thread_spinlock_t *lock); 34 35 36 #else /* !(NXT_THREADS) */ 37 38 39 typedef nxt_atomic_t nxt_thread_spinlock_t; 40 41 #define \ 42 nxt_thread_spin_init(ncpu, count) 43 44 #define \ 45 nxt_thread_spin_lock(lock) 46 47 #define \ 48 nxt_thread_spin_trylock(lock) \ 49 1 50 51 #define \ 52 nxt_thread_spin_unlock(lock) 53 54 #endif 55 56 57 #endif /* _NXT_UNIX_SPINLOCK_H_INCLUDED_ */ 58