37 #ifndef NVWA_FAST_MUTEX_H 38 #define NVWA_FAST_MUTEX_H 43 # if !defined(_NOTHREADS) 44 # if !defined(NVWA_USE_CXX11_MUTEX) && HAVE_CXX11_MUTEX != 0 && \ 45 !defined(_WIN32THREADS) && defined(_WIN32) && defined(_MT) && \ 46 (!defined(_MSC_VER) || defined(_DLL)) 56 # define NVWA_USE_CXX11_MUTEX 1 59 # if !defined(_WIN32THREADS) && \ 60 (defined(_WIN32) && defined(_MT)) 63 # define _WIN32THREADS 64 # elif !defined(_PTHREADS) && \ 71 # ifndef NVWA_USE_CXX11_MUTEX 72 # define NVWA_USE_CXX11_MUTEX 0 75 # if !defined(_PTHREADS) && !defined(_WIN32THREADS) && \ 76 !defined(_NOTHREADS) && NVWA_USE_CXX11_MUTEX == 0 80 # if defined(_NOTHREADS) 81 # if defined(_PTHREADS) || defined(_WIN32THREADS) || \ 82 NVWA_USE_CXX11_MUTEX != 0 84 # error "Cannot define multi-threaded mode with -D_NOTHREADS" 88 # if defined(__MINGW32__) && defined(_WIN32THREADS) && !defined(_MT) 89 # error "Be sure to specify -mthreads with -D_WIN32THREADS" 92 # ifndef _FAST_MUTEX_CHECK_INITIALIZATION 101 # define _FAST_MUTEX_CHECK_INITIALIZATION 1 104 # if defined(_PTHREADS) && defined(_WIN32THREADS) 114 # define _FAST_MUTEX_ASSERT(_Expr, _Msg) \ 116 fprintf(stderr, "fast_mutex::%s\n", _Msg); \ 121 # define _FAST_MUTEX_ASSERT(_Expr, _Msg) \ 125 # if NVWA_USE_CXX11_MUTEX != 0 132 # define __VOLATILE volatile 139 std::mutex _M_mtx_impl;
140 # if _FAST_MUTEX_CHECK_INITIALIZATION 152 # if _FAST_MUTEX_CHECK_INITIALIZATION 153 _M_initialized =
true;
159 # if _FAST_MUTEX_CHECK_INITIALIZATION 160 _M_initialized =
false;
165 # if _FAST_MUTEX_CHECK_INITIALIZATION 177 # if _FAST_MUTEX_CHECK_INITIALIZATION 185 _M_mtx_impl.unlock();
192 # endif // NVWA_USE_CXX11_MUTEX != 0 194 # if defined(_PTHREADS) && NVWA_USE_CXX11_MUTEX == 0 195 # include <pthread.h> 201 # define __VOLATILE volatile 208 pthread_mutex_t _M_mtx_impl;
209 # if _FAST_MUTEX_CHECK_INITIALIZATION 221 ::pthread_mutex_init(&_M_mtx_impl, NULL);
222 # if _FAST_MUTEX_CHECK_INITIALIZATION 223 _M_initialized =
true;
229 # if _FAST_MUTEX_CHECK_INITIALIZATION 230 _M_initialized =
false;
232 ::pthread_mutex_destroy(&_M_mtx_impl);
236 # if _FAST_MUTEX_CHECK_INITIALIZATION 240 ::pthread_mutex_lock(&_M_mtx_impl);
253 # if _FAST_MUTEX_CHECK_INITIALIZATION 261 ::pthread_mutex_unlock(&_M_mtx_impl);
270 # if defined(_WIN32THREADS) && NVWA_USE_CXX11_MUTEX == 0 271 # ifndef WIN32_LEAN_AND_MEAN 272 # define WIN32_LEAN_AND_MEAN 274 # include <windows.h> 280 # define __VOLATILE volatile 287 CRITICAL_SECTION _M_mtx_impl;
288 # if _FAST_MUTEX_CHECK_INITIALIZATION 300 ::InitializeCriticalSection(&_M_mtx_impl);
301 # if _FAST_MUTEX_CHECK_INITIALIZATION 302 _M_initialized =
true;
308 # if _FAST_MUTEX_CHECK_INITIALIZATION 309 _M_initialized =
false;
311 ::DeleteCriticalSection(&_M_mtx_impl);
315 # if _FAST_MUTEX_CHECK_INITIALIZATION 319 ::EnterCriticalSection(&_M_mtx_impl);
327 # if _FAST_MUTEX_CHECK_INITIALIZATION 335 ::LeaveCriticalSection(&_M_mtx_impl);
342 # endif // _WIN32THREADS 390 # endif // _NOTHREADS 412 #endif // NVWA_FAST_MUTEX_H
fast_mutex_autolock(fast_mutex &mtx)
fast_mutex & operator=(const fast_mutex &)
#define _FAST_MUTEX_ASSERT(_Expr, _Msg)