summaryrefslogtreecommitdiff
path: root/src/threading
diff options
context:
space:
mode:
authorLoïc Blot <nerzhul@users.noreply.github.com>2017-06-08 10:40:11 +0200
committerGitHub <noreply@github.com>2017-06-08 10:40:11 +0200
commit5bd33a158688f5fb950613278eefb95b0594a765 (patch)
treeaeeb82fafbc6559b68077f116df7200a63def657 /src/threading
parent0a5c3c28522f512f31dae3091668126c1eae787d (diff)
downloadminetest-5bd33a158688f5fb950613278eefb95b0594a765.tar.gz
minetest-5bd33a158688f5fb950613278eefb95b0594a765.tar.bz2
minetest-5bd33a158688f5fb950613278eefb95b0594a765.zip
C++11 patchset 5: use std::threads and remove old compat layer (#5928)
* C++11 patchset 5: use std::threads and remove old compat layer * use pragma once in modified headers * use C++11 function delete for object copy
Diffstat (limited to 'src/threading')
-rw-r--r--src/threading/thread.cpp114
-rw-r--r--src/threading/thread.h24
2 files changed, 6 insertions, 132 deletions
diff --git a/src/threading/thread.cpp b/src/threading/thread.cpp
index 1909da61d..e566824f7 100644
--- a/src/threading/thread.cpp
+++ b/src/threading/thread.cpp
@@ -28,31 +28,6 @@ DEALINGS IN THE SOFTWARE.
#include "log.h"
#include "porting.h"
-#define UNUSED(expr) do { (void)(expr); } while (0)
-
-#if USE_CPP11_THREADS
- #include <chrono>
- #include <system_error>
-#elif USE_WIN_THREADS
- #ifndef _WIN32_WCE
- #include <process.h>
- #endif
-#elif USE_POSIX_THREADS
- #include <time.h>
- #include <assert.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/time.h>
-
- #if defined(__FreeBSD__) || defined(__APPLE__)
- #include <sys/types.h>
- #include <sys/sysctl.h>
- #elif defined(_GNU_SOURCE)
- #include <sys/sysinfo.h>
- #endif
-#endif
-
-
// for setName
#if defined(__linux__)
#include <sys/prctl.h>
@@ -70,8 +45,6 @@ DEALINGS IN THE SOFTWARE.
// for bindToProcessor
#if __FreeBSD_version >= 702106
typedef cpuset_t cpu_set_t;
-#elif defined(__linux__)
- #include <sched.h>
#elif defined(__sun) || defined(sun)
#include <sys/types.h>
#include <sys/processor.h>
@@ -121,28 +94,12 @@ bool Thread::start()
// The mutex may already be locked if the thread is being restarted
m_start_finished_mutex.try_lock();
-#if USE_CPP11_THREADS
-
try {
m_thread_obj = new std::thread(threadProc, this);
} catch (const std::system_error &e) {
return false;
}
-#elif USE_WIN_THREADS
-
- m_thread_handle = CreateThread(NULL, 0, threadProc, this, 0, &m_thread_id);
- if (!m_thread_handle)
- return false;
-
-#elif USE_POSIX_THREADS
-
- int status = pthread_create(&m_thread_handle, NULL, threadProc, this);
- if (status)
- return false;
-
-#endif
-
// Allow spawned thread to continue
m_start_finished_mutex.unlock();
@@ -169,31 +126,12 @@ bool Thread::wait()
if (!m_joinable)
return false;
-#if USE_CPP11_THREADS
m_thread_obj->join();
delete m_thread_obj;
m_thread_obj = NULL;
-#elif USE_WIN_THREADS
-
- int ret = WaitForSingleObject(m_thread_handle, INFINITE);
- assert(ret == WAIT_OBJECT_0);
- UNUSED(ret);
-
- CloseHandle(m_thread_handle);
- m_thread_handle = NULL;
- m_thread_id = -1;
-
-#elif USE_POSIX_THREADS
-
- int ret = pthread_join(m_thread_handle, NULL);
- assert(ret == 0);
- UNUSED(ret);
-
-#endif
-
assert(m_running == false);
m_joinable = false;
return true;
@@ -209,9 +147,10 @@ bool Thread::kill()
m_running = false;
-#if USE_WIN_THREADS
- TerminateThread(m_thread_handle, 0);
- CloseHandle(m_thread_handle);
+#if defined(_WIN32)
+ // See https://msdn.microsoft.com/en-us/library/hh920601.aspx#thread__native_handle_method
+ TerminateThread((HANDLE) m_thread_obj->native_handle(), 0);
+ CloseHandle((HANDLE) m_thread_obj->native_handle());
#else
// We need to pthread_kill instead on Android since NDKv5's pthread
// implementation is incomplete.
@@ -241,13 +180,7 @@ bool Thread::getReturnValue(void **ret)
}
-#if USE_CPP11_THREADS || USE_POSIX_THREADS
void *Thread::threadProc(void *param)
-#elif defined(_WIN32_WCE)
-DWORD Thread::threadProc(LPVOID param)
-#elif defined(_WIN32)
-DWORD WINAPI Thread::threadProc(LPVOID param)
-#endif
{
Thread *thr = (Thread *)param;
@@ -325,46 +258,7 @@ void Thread::setName(const std::string &name)
unsigned int Thread::getNumberOfProcessors()
{
-#if USE_CPP11_THREADS
-
return std::thread::hardware_concurrency();
-
-#elif USE_WIN_THREADS
-
- SYSTEM_INFO sysinfo;
- GetSystemInfo(&sysinfo);
- return sysinfo.dwNumberOfProcessors;
-
-#elif defined(_SC_NPROCESSORS_ONLN)
-
- return sysconf(_SC_NPROCESSORS_ONLN);
-
-#elif defined(__FreeBSD__) || defined(__NetBSD__) || \
- defined(__DragonFly__) || defined(__APPLE__)
-
- unsigned int num_cpus = 1;
- size_t len = sizeof(num_cpus);
-
- int mib[2];
- mib[0] = CTL_HW;
- mib[1] = HW_NCPU;
-
- sysctl(mib, 2, &num_cpus, &len, NULL, 0);
- return num_cpus;
-
-#elif defined(_GNU_SOURCE)
-
- return get_nprocs();
-
-#elif defined(PTW32_VERSION) || defined(__hpux)
-
- return pthread_num_processors_np();
-
-#else
-
- return 1;
-
-#endif
}
diff --git a/src/threading/thread.h b/src/threading/thread.h
index ab943f094..6292d9ed7 100644
--- a/src/threading/thread.h
+++ b/src/threading/thread.h
@@ -23,8 +23,7 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
*/
-#ifndef THREADING_THREAD_H
-#define THREADING_THREAD_H
+#pragma once
#include "util/basic_macros.h"
#include "threads.h"
@@ -93,17 +92,8 @@ public:
inline bool isRunning() { return m_running; }
inline bool stopRequested() { return m_request_stop; }
-#if USE_CPP11_THREADS
inline threadid_t getThreadId() { return m_thread_obj->get_id(); }
inline threadhandle_t getThreadHandle() { return m_thread_obj->native_handle(); }
-#else
-# if USE_WIN_THREADS
- inline threadid_t getThreadId() { return m_thread_id; }
-# else
- inline threadid_t getThreadId() { return m_thread_handle; }
-# endif
- inline threadhandle_t getThreadHandle() { return m_thread_handle; }
-#endif
/*
* Gets the thread return value.
@@ -156,14 +146,7 @@ private:
std::mutex m_mutex;
std::mutex m_start_finished_mutex;
-#if USE_CPP11_THREADS
std::thread *m_thread_obj;
-#else
- threadhandle_t m_thread_handle;
-# if USE_WIN_THREADS
- threadid_t m_thread_id;
-# endif
-#endif
static ThreadStartFunc threadProc;
@@ -172,9 +155,6 @@ private:
// available to us, so we maintain one ourselves. This is set on thread start.
tid_t m_kernel_thread_id;
#endif
-
- DISABLE_CLASS_COPY(Thread);
+ Thread(const Thread &) = delete;
};
-#endif
-