xref: /unit/src/nxt_spinlock.h (revision 0:a63ceefd6ab0)
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