X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fthread.cpp;h=5c23aa50373618f80a5f2b0a004cac5211548b90;hp=7ffc3dfe8e78ed6823dde782cffe4b6ab3768f52;hb=06f33ff1ee0c0e8345cb6d5b84ce5db9f043203d;hpb=2608b9249d9c25a699c8db8725e35bd4ec0b65ab diff --git a/src/thread.cpp b/src/thread.cpp index 7ffc3dfe..5c23aa50 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -36,13 +36,7 @@ namespace { extern "C" { // and last thread are special. First one is the main search thread while the // last one mimics a timer, they run in main_loop() and timer_loop(). -#if defined(_WIN32) || defined(_WIN64) - DWORD WINAPI start_routine(LPVOID thread) { -#else - void* start_routine(void* thread) { -#endif - - Thread* th = (Thread*)thread; + long start_routine(Thread* th) { if (th->threadID == 0) th->main_loop(); @@ -216,18 +210,11 @@ void ThreadsManager::set_size(int cnt) { void ThreadsManager::init() { + read_uci_options(); + cond_init(sleepCond); lock_init(splitLock); - for (int i = 0; i <= MAX_THREADS; i++) - { - lock_init(threads[i].sleepLock); - cond_init(threads[i].sleepCond); - - for (int j = 0; j < MAX_SPLITPOINTS_PER_THREAD; j++) - lock_init(threads[i].splitPoints[j].lock); - } - // Allocate main thread tables to call evaluate() also when not searching threads[0].pawnTable.init(); threads[0].materialTable.init(); @@ -239,6 +226,12 @@ void ThreadsManager::init() { threads[i].do_sleep = (i != 0); // Avoid a race with start_thinking() threads[i].threadID = i; + lock_init(threads[i].sleepLock); + cond_init(threads[i].sleepCond); + + for (int j = 0; j < MAX_SPLITPOINTS_PER_THREAD; j++) + lock_init(threads[i].splitPoints[j].lock); + if (!thread_create(threads[i].handle, start_routine, threads[i])) { std::cerr << "Failed to create thread number " << i << std::endl; @@ -300,7 +293,7 @@ bool ThreadsManager::available_slave_exists(int master) const { template Value ThreadsManager::split(Position& pos, Stack* ss, Value alpha, Value beta, Value bestValue, Move* bestMove, Depth depth, - Move threatMove, int moveCount, MovePicker *mp, int nodeType) { + Move threatMove, int moveCount, MovePicker* mp, int nodeType) { assert(pos.pos_is_ok()); assert(bestValue > -VALUE_INFINITE); assert(bestValue <= alpha);