1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-05-01 01:03:09 +00:00

Split() clean up locking

Only unlock and relock when idle_loop() is actually called

No functional change
This commit is contained in:
jundery 2013-02-27 17:55:56 -07:00 committed by Marco Costalba
parent 57b6df4874
commit 68d1bebd8e

View file

@ -303,28 +303,28 @@ void Thread::split(Position& pos, Stack* ss, Value alpha, Value beta, Value* bes
slave->notify_one(); // Could be sleeping
}
sp.mutex.unlock();
Threads.mutex.unlock();
// Everything is set up. The master thread enters the idle loop, from which
// it will instantly launch a search, because its 'searching' flag is set.
// The thread will return from the idle loop when all slaves have finished
// their work at this split point.
if (slavesCnt > 1 || Fake)
{
sp.mutex.unlock();
Threads.mutex.unlock();
Thread::idle_loop(); // Force a call to base class idle_loop()
// In helpful master concept a master can help only a sub-tree of its split
// point, and because here is all finished is not possible master is booked.
assert(!searching);
assert(!activePosition);
}
// We have returned from the idle loop, which means that all threads are
// finished. Note that setting 'searching' and decreasing splitPointsSize is
// done under lock protection to avoid a race with Thread::is_available_to().
Threads.mutex.lock();
sp.mutex.lock();
// We have returned from the idle loop, which means that all threads are
// finished. Note that setting 'searching' and decreasing splitPointsSize is
// done under lock protection to avoid a race with Thread::is_available_to().
Threads.mutex.lock();
sp.mutex.lock();
}
searching = true;
splitPointsSize--;