-public:
- void init(); // No c'tor and d'tor, threads rely on globals that should
- void exit(); // be initialized and valid during the whole thread lifetime.
-
- Thread& operator[](size_t id) { return *threads[id]; }
- size_t size() const { return threads.size(); }
- MainThread* main_thread() { return static_cast<MainThread*>(threads[0]); }
- TimerThread* timer_thread() { return timer; }
-
- void read_uci_options();
- bool slave_available(Thread* master) const;
- void wait_for_think_finished();
- void start_thinking(const Position&, const Search::LimitsType&,
- const std::vector<Move>&, Search::StateStackPtr&);
-
- bool sleepWhileIdle;
- Depth minimumSplitDepth;
- size_t maxThreadsPerSplitPoint;
- Mutex mutex;
- ConditionVariable sleepCondition;
+ void start_thinking(Position&, StateListPtr&, const Search::LimitsType&, bool = false);
+ void clear();
+ void set(size_t);
+
+ MainThread* main() const { return static_cast<MainThread*>(front()); }
+ uint64_t nodes_searched() const { return accumulate(&Thread::nodes); }
+ uint64_t tb_hits() const { return accumulate(&Thread::tbHits); }
+
+ std::atomic_bool stop;