-/// Thread struct keeps together all the thread related stuff like locks, state
-/// and especially split points. We also use per-thread pawn and material hash
-/// tables so that once we get a pointer to an entry its life time is unlimited
-/// and we don't have to care about someone changing the entry under our feet.
-
-class Thread {
-
- Thread(const Thread&); // Only declared to disable the default ones
- Thread& operator=(const Thread&); // that are not suitable in this case.
-
- typedef void (Thread::* Fn) ();
-
-public:
- Thread(Fn fn);
- ~Thread();
-
- void wake_up();
- bool cutoff_occurred() const;
- bool is_available_to(Thread* master) const;
- void idle_loop(SplitPoint* sp_master);
- void idle_loop() { idle_loop(NULL); } // Hack to allow storing in start_fn
- void main_loop();
- void timer_loop();
- void wait_for_stop_or_ponderhit();
-
- SplitPoint splitPoints[MAX_SPLITPOINTS_PER_THREAD];
- MaterialTable materialTable;
- PawnTable pawnTable;
- int idx;
- int maxPly;
- Lock sleepLock;
- WaitCondition sleepCond;
- NativeHandle handle;
- Fn start_fn;
- SplitPoint* volatile curSplitPoint;
- volatile int splitPointsCnt;
- volatile bool is_searching;
- volatile bool do_sleep;
- volatile bool do_exit;