49 # if !defined(_NOTHREADS)
50 # if !defined(_WIN32THREADS) && \
51 (defined(_WIN32) && defined(_MT))
54 # define _WIN32THREADS
55 # elif !defined(_PTHREADS) && \
64 # if !defined(_PTHREADS) && !defined(_WIN32THREADS) && !defined(_NOTHREADS)
68 # if defined(_NOTHREADS)
69 # if defined(_PTHREADS) || defined(_WIN32THREADS)
71 # error "Cannot define multi-threaded mode with -D_NOTHREADS"
72 # if defined(__MINGW32__) && defined(_WIN32THREADS) && !defined(_MT)
73 # error "Be sure to specify -mthreads with -D_WIN32THREADS"
78 # ifndef _FAST_MUTEX_CHECK_INITIALIZATION
87 # define _FAST_MUTEX_CHECK_INITIALIZATION 1
90 # if defined(_PTHREADS) && defined(_WIN32THREADS)
100 # define _FAST_MUTEX_ASSERT(_Expr, _Msg) \
102 fprintf(stderr, "fast_mutex::%s\n", _Msg); \
107 # define _FAST_MUTEX_ASSERT(_Expr, _Msg) \
112 # include <pthread.h>
117 # define __VOLATILE volatile
127 pthread_mutex_t _M_mtx_impl;
128 # if _FAST_MUTEX_CHECK_INITIALIZATION
140 ::pthread_mutex_init(&_M_mtx_impl, NULL);
141 # if _FAST_MUTEX_CHECK_INITIALIZATION
142 _M_initialized =
true;
148 # if _FAST_MUTEX_CHECK_INITIALIZATION
149 _M_initialized =
false;
151 ::pthread_mutex_destroy(&_M_mtx_impl);
155 # if _FAST_MUTEX_CHECK_INITIALIZATION
159 ::pthread_mutex_lock(&_M_mtx_impl);
172 # if _FAST_MUTEX_CHECK_INITIALIZATION
180 ::pthread_mutex_unlock(&_M_mtx_impl);
188 # ifdef _WIN32THREADS
189 # include <windows.h>
194 # define __VOLATILE volatile
204 CRITICAL_SECTION _M_mtx_impl;
205 # if _FAST_MUTEX_CHECK_INITIALIZATION
217 ::InitializeCriticalSection(&_M_mtx_impl);
218 # if _FAST_MUTEX_CHECK_INITIALIZATION
219 _M_initialized =
true;
225 # if _FAST_MUTEX_CHECK_INITIALIZATION
226 _M_initialized =
false;
228 ::DeleteCriticalSection(&_M_mtx_impl);
232 # if _FAST_MUTEX_CHECK_INITIALIZATION
236 ::EnterCriticalSection(&_M_mtx_impl);
244 # if _FAST_MUTEX_CHECK_INITIALIZATION
252 ::LeaveCriticalSection(&_M_mtx_impl);
258 # endif // _WIN32THREADS
307 # endif // _NOTHREADS
332 #endif // _FAST_MUTEX_H