mirror of
https://github.com/sockspls/badfish
synced 2025-04-29 16:23:09 +00:00
Revert sleeping threads
Revert141caf1d5b
+c59efc53c9
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
9ecdfd2401
commit
d0dc05ad41
1 changed files with 20 additions and 22 deletions
|
@ -94,7 +94,7 @@ namespace {
|
|||
int ActiveThreads;
|
||||
volatile bool AllThreadsShouldExit;
|
||||
Thread threads[MAX_THREADS];
|
||||
Lock MPLock;
|
||||
Lock MPLock, WaitLock;
|
||||
WaitCondition WaitCond[MAX_THREADS];
|
||||
};
|
||||
|
||||
|
@ -469,6 +469,10 @@ bool think(Position& pos, bool infinite, bool ponder, int time[], int increment[
|
|||
init_eval(ThreadsMgr.active_threads());
|
||||
}
|
||||
|
||||
// Wake up needed threads
|
||||
for (int i = 1; i < newActiveThreads; i++)
|
||||
ThreadsMgr.wake_sleeping_thread(i);
|
||||
|
||||
// Set thinking time
|
||||
int myTime = time[pos.side_to_move()];
|
||||
int myIncrement = increment[pos.side_to_move()];
|
||||
|
@ -501,6 +505,9 @@ bool think(Position& pos, bool infinite, bool ponder, int time[], int increment[
|
|||
if (UseLogFile)
|
||||
LogFile.close();
|
||||
|
||||
// This makes all the threads to go to sleep
|
||||
ThreadsMgr.set_active_threads(1);
|
||||
|
||||
return !Quit;
|
||||
}
|
||||
|
||||
|
@ -2195,9 +2202,7 @@ split_point_start: // At split points actual search starts from here
|
|||
|
||||
// If we are not thinking, wait for a condition to be signaled
|
||||
// instead of wasting CPU time polling for work.
|
||||
while ( threadID >= ActiveThreads
|
||||
|| threads[threadID].state == THREAD_INITIALIZING
|
||||
|| (!sp && threads[threadID].state == THREAD_AVAILABLE))
|
||||
while (threadID >= ActiveThreads || threads[threadID].state == THREAD_INITIALIZING)
|
||||
{
|
||||
assert(!sp);
|
||||
assert(threadID != 0);
|
||||
|
@ -2205,21 +2210,14 @@ split_point_start: // At split points actual search starts from here
|
|||
if (AllThreadsShouldExit)
|
||||
break;
|
||||
|
||||
lock_grab(&MPLock);
|
||||
|
||||
// Retest condition under lock protection
|
||||
if (!( threadID >= ActiveThreads
|
||||
|| threads[threadID].state == THREAD_INITIALIZING
|
||||
|| (!sp && threads[threadID].state == THREAD_AVAILABLE)))
|
||||
{
|
||||
lock_release(&MPLock);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Put thread to sleep
|
||||
threads[threadID].state = THREAD_AVAILABLE;
|
||||
cond_wait(&WaitCond[threadID], &MPLock);
|
||||
lock_release(&MPLock);
|
||||
|
||||
lock_grab(&WaitLock);
|
||||
|
||||
if (threadID >= ActiveThreads || threads[threadID].state == THREAD_INITIALIZING)
|
||||
cond_wait(&WaitCond[threadID], &WaitLock);
|
||||
|
||||
lock_release(&WaitLock);
|
||||
}
|
||||
|
||||
// If this thread has been assigned work, launch a search
|
||||
|
@ -2279,6 +2277,7 @@ split_point_start: // At split points actual search starts from here
|
|||
|
||||
// Initialize global locks
|
||||
lock_init(&MPLock);
|
||||
lock_init(&WaitLock);
|
||||
|
||||
for (i = 0; i < MAX_THREADS; i++)
|
||||
cond_init(&WaitCond[i]);
|
||||
|
@ -2342,6 +2341,7 @@ split_point_start: // At split points actual search starts from here
|
|||
for (int j = 0; j < MAX_ACTIVE_SPLIT_POINTS; j++)
|
||||
lock_destroy(&(threads[i].splitPoints[j].lock));
|
||||
|
||||
lock_destroy(&WaitLock);
|
||||
lock_destroy(&MPLock);
|
||||
|
||||
// Now we can safely destroy the wait conditions
|
||||
|
@ -2507,8 +2507,6 @@ split_point_start: // At split points actual search starts from here
|
|||
assert(i == master || threads[i].state == THREAD_BOOKED);
|
||||
|
||||
threads[i].state = THREAD_WORKISWAITING; // This makes the slave to exit from idle_loop()
|
||||
if (i != master)
|
||||
wake_sleeping_thread(i);
|
||||
}
|
||||
|
||||
// Everything is set up. The master thread enters the idle loop, from
|
||||
|
@ -2537,9 +2535,9 @@ split_point_start: // At split points actual search starts from here
|
|||
|
||||
void ThreadsManager::wake_sleeping_thread(int threadID) {
|
||||
|
||||
lock_grab(&MPLock);
|
||||
lock_grab(&WaitLock);
|
||||
cond_signal(&WaitCond[threadID]);
|
||||
lock_release(&MPLock);
|
||||
lock_release(&WaitLock);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue