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 Part of Wu Yongwei's new/delete debug memory leak detector.
fast_mutex_autolock(fast_mutex &__mtx)
#define _FAST_MUTEX_ASSERT(_Expr, _Msg)
Part of Wu Yongwei's new/delete debug memory leak detector.