From be77406a55d1840862237cffe153dc08a83108d3 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sat, 21 Mar 2015 11:50:14 +0100 Subject: [PATCH 1/1] Get rid of nativeThread No functional change. --- src/endgame.h | 2 +- src/thread.cpp | 10 +++++----- src/thread.h | 3 +-- src/uci.cpp | 2 +- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/endgame.h b/src/endgame.h index cd05f0cd..f24ac93d 100644 --- a/src/endgame.h +++ b/src/endgame.h @@ -76,7 +76,7 @@ eg_type = typename std::conditional<(E < SCALING_FUNCTIONS), Value, ScaleFactor> template struct EndgameBase { - virtual ~EndgameBase() {} + virtual ~EndgameBase() = default; virtual Color strong_side() const = 0; virtual T operator()(const Position&) const = 0; }; diff --git a/src/thread.cpp b/src/thread.cpp index a715d44e..ef5ae857 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -38,9 +38,9 @@ namespace { // when start_routine (and hence virtual idle_loop) is called and when joining. template T* new_thread() { - T* th = new T(); - th->nativeThread = std::thread(&ThreadBase::idle_loop, th); // Will go to sleep - return th; + std::thread* th = new T; + *th = std::thread(&T::idle_loop, (T*)th); // Will go to sleep + return (T*)th; } void delete_thread(ThreadBase* th) { @@ -50,7 +50,7 @@ namespace { th->mutex.unlock(); th->notify_one(); - th->nativeThread.join(); // Wait for thread termination + th->join(); // Wait for thread termination delete th; } @@ -61,7 +61,7 @@ namespace { void ThreadBase::notify_one() { - std::unique_lock(this->mutex); + std::unique_lock lk(mutex); sleepCondition.notify_one(); } diff --git a/src/thread.h b/src/thread.h index 215b27c6..ee7fb061 100644 --- a/src/thread.h +++ b/src/thread.h @@ -89,14 +89,13 @@ struct SplitPoint { /// ThreadBase struct is the base of the hierarchy from where we derive all the /// specialized thread classes. -struct ThreadBase { +struct ThreadBase : public std::thread { virtual ~ThreadBase() = default; virtual void idle_loop() = 0; void notify_one(); void wait_for(volatile const bool& b); - std::thread nativeThread; Mutex mutex; Spinlock spinlock; ConditionVariable sleepCondition; diff --git a/src/uci.cpp b/src/uci.cpp index 7a0ead60..2c07807c 100644 --- a/src/uci.cpp +++ b/src/uci.cpp @@ -68,7 +68,7 @@ namespace { return; pos.set(fen, Options["UCI_Chess960"], Threads.main()); - SetupStates = Search::StateStackPtr(new std::stack()); + SetupStates = Search::StateStackPtr(new std::stack); // Parse move list (if any) while (is >> token && (m = UCI::to_move(pos, token)) != MOVE_NONE) -- 2.39.2