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:
parent
57b6df4874
commit
68d1bebd8e
1 changed files with 9 additions and 9 deletions
|
@ -303,28 +303,28 @@ void Thread::split(Position& pos, Stack* ss, Value alpha, Value beta, Value* bes
|
||||||
slave->notify_one(); // Could be sleeping
|
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
|
// 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.
|
// 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
|
// The thread will return from the idle loop when all slaves have finished
|
||||||
// their work at this split point.
|
// their work at this split point.
|
||||||
if (slavesCnt > 1 || Fake)
|
if (slavesCnt > 1 || Fake)
|
||||||
{
|
{
|
||||||
|
sp.mutex.unlock();
|
||||||
|
Threads.mutex.unlock();
|
||||||
|
|
||||||
Thread::idle_loop(); // Force a call to base class idle_loop()
|
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
|
// 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.
|
// point, and because here is all finished is not possible master is booked.
|
||||||
assert(!searching);
|
assert(!searching);
|
||||||
assert(!activePosition);
|
assert(!activePosition);
|
||||||
}
|
|
||||||
|
|
||||||
// We have returned from the idle loop, which means that all threads are
|
// We have returned from the idle loop, which means that all threads are
|
||||||
// finished. Note that setting 'searching' and decreasing splitPointsSize is
|
// finished. Note that setting 'searching' and decreasing splitPointsSize is
|
||||||
// done under lock protection to avoid a race with Thread::is_available_to().
|
// done under lock protection to avoid a race with Thread::is_available_to().
|
||||||
Threads.mutex.lock();
|
Threads.mutex.lock();
|
||||||
sp.mutex.lock();
|
sp.mutex.lock();
|
||||||
|
}
|
||||||
|
|
||||||
searching = true;
|
searching = true;
|
||||||
splitPointsSize--;
|
splitPointsSize--;
|
||||||
|
|
Loading…
Add table
Reference in a new issue