assert(!searching);
assert(!activePosition);
- searching = true;
-
// We have returned from the idle loop, which means that all threads are
// finished. Note that decreasing splitPointsSize must be done under lock
// protection to avoid a race with Thread::can_join().
- sp.spinlock.acquire();
+ spinlock.acquire();
+ searching = true;
--splitPointsSize;
activeSplitPoint = sp.parentSplitPoint;
activePosition = &pos;
+
+ spinlock.release();
+
+ // Split point data cannot be changed now, so no need to lock protect
pos.set_nodes_searched(pos.nodes_searched() + sp.nodes);
*bestMove = sp.bestMove;
*bestValue = sp.bestValue;
-
- sp.spinlock.release();
}
assert(requested > 0);
- // If zero (default) then set best minimum split depth automatically
- if (!minimumSplitDepth)
- minimumSplitDepth = requested < 8 ? 4 * ONE_PLY : 7 * ONE_PLY;
-
while (size() < requested)
push_back(new_thread<Thread>());
StateStackPtr& states) {
main()->join();
- SearchTime = now(); // As early as possible
-
Signals.stopOnPonderhit = Signals.firstRootMove = false;
Signals.stop = Signals.failedLowAtRoot = false;