42 # if !defined(_NOTHREADS)
43 # if !defined(_WIN32THREADS) && \
44 (defined(_WIN32) && defined(_MT))
47 # define _WIN32THREADS
48 # elif !defined(_PTHREADS) && \
57 # if !defined(_PTHREADS) && !defined(_WIN32THREADS) && !defined(_NOTHREADS)
61 # if defined(_NOTHREADS)
62 # if defined(_PTHREADS) || defined(_WIN32THREADS)
64 # error "Cannot define multi-threaded mode with -D_NOTHREADS"
65 # if defined(__MINGW32__) && defined(_WIN32THREADS) && !defined(_MT)
66 # error "Be sure to specify -mthreads with -D_WIN32THREADS"
71 # ifndef _FAST_MUTEX_CHECK_INITIALIZATION
80 # define _FAST_MUTEX_CHECK_INITIALIZATION 1
83 # if defined(_PTHREADS) && defined(_WIN32THREADS)
93 # define _FAST_MUTEX_ASSERT(_Expr, _Msg) \
95 fprintf(stderr, "fast_mutex::%s\n", _Msg); \
100 # define _FAST_MUTEX_ASSERT(_Expr, _Msg) \
105 # include <pthread.h>
110 # define __VOLATILE volatile
117 pthread_mutex_t _M_mtx_impl;
118 # if _FAST_MUTEX_CHECK_INITIALIZATION
130 ::pthread_mutex_init(&_M_mtx_impl, NULL);
131 # if _FAST_MUTEX_CHECK_INITIALIZATION
132 _M_initialized =
true;
138 # if _FAST_MUTEX_CHECK_INITIALIZATION
139 _M_initialized =
false;
141 ::pthread_mutex_destroy(&_M_mtx_impl);
145 # if _FAST_MUTEX_CHECK_INITIALIZATION
149 ::pthread_mutex_lock(&_M_mtx_impl);
162 # if _FAST_MUTEX_CHECK_INITIALIZATION
170 ::pthread_mutex_unlock(&_M_mtx_impl);
178 # ifdef _WIN32THREADS
179 # ifndef WIN32_LEAN_AND_MEAN
180 # define WIN32_LEAN_AND_MEAN
182 # include <windows.h>
187 # define __VOLATILE volatile
194 CRITICAL_SECTION _M_mtx_impl;
195 # if _FAST_MUTEX_CHECK_INITIALIZATION
207 ::InitializeCriticalSection(&_M_mtx_impl);
208 # if _FAST_MUTEX_CHECK_INITIALIZATION
209 _M_initialized =
true;
215 # if _FAST_MUTEX_CHECK_INITIALIZATION
216 _M_initialized =
false;
218 ::DeleteCriticalSection(&_M_mtx_impl);
222 # if _FAST_MUTEX_CHECK_INITIALIZATION
226 ::EnterCriticalSection(&_M_mtx_impl);
234 # if _FAST_MUTEX_CHECK_INITIALIZATION
242 ::LeaveCriticalSection(&_M_mtx_impl);
248 # endif // _WIN32THREADS
294 # endif // _NOTHREADS
314 #endif // _FAST_MUTEX_H