diff options
author | sfan5 <sfan5@live.de> | 2016-10-06 21:13:04 +0200 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2016-10-06 22:37:30 +0200 |
commit | 0a16e53b40d347db7dcd04cb694d0f8f2ed1a5a7 (patch) | |
tree | e51a3209f5d3215bd9ab55311b0e4702ce3e9fca /src/threads.h | |
parent | 155288ee981c70f505526347cb2bcda4df1c8e6b (diff) | |
download | hax-minetest-server-0a16e53b40d347db7dcd04cb694d0f8f2ed1a5a7.tar.gz hax-minetest-server-0a16e53b40d347db7dcd04cb694d0f8f2ed1a5a7.zip |
Fix C++11 Windows build of threading code
The initial problem was that mutex_auto_lock.h tries to use std::unique_lock<std::mutex>
despite mutex.h not using C++11's std::mutex on Windows. The problem here is the mismatch
between C++11 usage conditions of the two headers. This commit moves the decision logic
to threads.h and makes sure mutex.h, mutex_auto_lock.h and event.h all use the same features.
Diffstat (limited to 'src/threads.h')
-rw-r--r-- | src/threads.h | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/threads.h b/src/threads.h index d4306f631..ce98593cd 100644 --- a/src/threads.h +++ b/src/threads.h @@ -21,7 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #define THREADS_HEADER // -// Determine which threading API we will use +// Determine which threading APIs we will use // #if __cplusplus >= 201103L #define USE_CPP11_THREADS 1 @@ -31,11 +31,27 @@ with this program; if not, write to the Free Software Foundation, Inc., #define USE_POSIX_THREADS 1 #endif +#if defined(_WIN32) + // Prefer critical section API because std::mutex is much slower on Windows + #define USE_WIN_MUTEX 1 +#elif __cplusplus >= 201103L + #define USE_CPP11_MUTEX 1 +#else + #define USE_POSIX_MUTEX 1 +#endif + /////////////// #if USE_CPP11_THREADS #include <thread> +#elif USE_POSIX_THREADS + #include <pthread.h> +#else + #ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN + #endif + #include <windows.h> #endif #include "threading/mutex.h" |