comparison src/core/ngx_atomic.h @ 371:780e93985b93

nginx-0.0.7-2004-06-28-20:05:02 import
author Igor Sysoev <igor@sysoev.ru>
date Mon, 28 Jun 2004 16:05:02 +0000
parents 54f76b0b8dca
children
comparison
equal deleted inserted replaced
370:54f76b0b8dca 371:780e93985b93
70 70
71 #elif (WIN32) 71 #elif (WIN32)
72 72
73 #define ngx_atomic_inc(p) InterlockedIncrement((long *) p) 73 #define ngx_atomic_inc(p) InterlockedIncrement((long *) p)
74 #define ngx_atomic_dec(p) InterlockedDecrement((long *) p) 74 #define ngx_atomic_dec(p) InterlockedDecrement((long *) p)
75 /* STUB */ 75
76 #define ngx_atomic_cmp_set(lock, old, set) 1 76 #if defined(__WATCOMC__) || defined(__BORLANDC__)
77 #if 0 77
78 #define ngx_atomic_cmp_set(lock, old, set) \ 78 #define ngx_atomic_cmp_set(lock, old, set) \
79 InterlockedCompareExchange(lock, set, old) 79 (InterlockedCompareExchange((long *) lock, set, old) == old)
80
81 #else
82
83 #define ngx_atomic_cmp_set(lock, old, set) \
84 (InterlockedCompareExchange((void **) lock, (void *) set, (void *) old) \
85 == (void *) old)
86
80 #endif 87 #endif
81
82 88
83 #else 89 #else
84 90
85 typedef volatile uint32_t ngx_atomic_t; 91 typedef volatile uint32_t ngx_atomic_t;
86 92
91 /**/ 97 /**/
92 98
93 #endif 99 #endif
94 100
95 101
96 static ngx_inline ngx_int_t ngx_trylock(ngx_atomic_t *lock) 102 #define ngx_trylock(lock) (*(lock) == 0 && ngx_atomic_cmp_set(lock, 0, 1))
97 { 103 #define ngx_unlock(lock) *(lock) = 0
98 if (*lock) {
99 return NGX_BUSY;
100 }
101
102 if (ngx_atomic_cmp_set(lock, 0, 1)) {
103 return NGX_OK;
104 }
105
106 return NGX_BUSY;
107 }
108 104
109 105
110 #endif /* _NGX_ATOMIC_H_INCLUDED_ */ 106 #endif /* _NGX_ATOMIC_H_INCLUDED_ */