X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fthread.cpp;h=b4958ea32e22417527357b2b734e90fb0bf4eae8;hb=9a6cfee73bbad3051f888e6b8f8e88293763bf70;hp=71bf08d2da67e238590a93b8c23182f047d4e4a4;hpb=f04f50b368b09edcb2e965bbdd44980654c60cc3;p=stockfish diff --git a/src/thread.cpp b/src/thread.cpp index 71bf08d2..b4958ea3 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -144,7 +144,7 @@ void Thread::split(Position& pos, Stack* ss, Value alpha, Value beta, Value* bes // Pick and init the next available split point SplitPoint& sp = splitPoints[splitPointsSize]; - sp.mutex.lock(); // No contention here until we don't increment splitPointsSize + sp.spinlock.acquire(); // No contention here until we don't increment splitPointsSize sp.master = this; sp.parentSplitPoint = activeSplitPoint; @@ -174,7 +174,7 @@ void Thread::split(Position& pos, Stack* ss, Value alpha, Value beta, Value* bes while ( sp.slavesMask.count() < MAX_SLAVES_PER_SPLITPOINT && (slave = Threads.available_slave(&sp)) != nullptr) { - slave->allocMutex.lock(); + slave->spinlock.acquire(); if (slave->can_join(activeSplitPoint)) { @@ -183,14 +183,14 @@ void Thread::split(Position& pos, Stack* ss, Value alpha, Value beta, Value* bes slave->searching = true; } - slave->allocMutex.unlock(); + slave->spinlock.release(); } // 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. - sp.mutex.unlock(); + sp.spinlock.release(); Thread::idle_loop(); // Force a call to base class idle_loop() @@ -205,7 +205,7 @@ void Thread::split(Position& pos, Stack* ss, Value alpha, Value beta, Value* bes // 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.mutex.lock(); + sp.spinlock.acquire(); --splitPointsSize; activeSplitPoint = sp.parentSplitPoint; @@ -214,7 +214,7 @@ void Thread::split(Position& pos, Stack* ss, Value alpha, Value beta, Value* bes *bestMove = sp.bestMove; *bestValue = sp.bestValue; - sp.mutex.unlock(); + sp.spinlock.release(); } @@ -373,7 +373,5 @@ void ThreadPool::start_thinking(const Position& pos, const LimitsType& limits, RootMoves.push_back(RootMove(m)); main()->thinking = true; - - for (Thread* th : *this) - th->notify_one(); + main()->notify_one(); // Wake up main thread: 'thinking' must be already set }