From 1e92df6b20aa224026b435e03169edaf4bbecdc1 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Mon, 8 Aug 2011 13:41:58 +0100 Subject: [PATCH] Retire Thread::INITIALIZING Was used to prevent issues when creating multiple threads on Windows, but now it seems we can remove it safely. No functional change. Signed-off-by: Marco Costalba --- src/search.cpp | 13 +++++-------- src/thread.cpp | 7 ++----- src/thread.h | 1 - 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index 49074cee..eda9d292 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -2159,23 +2159,20 @@ void Thread::idle_loop(SplitPoint* sp) { || do_terminate || (Threads.use_sleeping_threads() && state == Thread::AVAILABLE)) { - assert(!sp || Threads.use_sleeping_threads()); - assert(threadID != 0 || Threads.use_sleeping_threads()); + assert((!sp && threadID) || Threads.use_sleeping_threads()); + + // Grab the lock to avoid races with Thread::wake_up() + lock_grab(&sleepLock); // Slave thread should exit as soon as do_terminate flag raises if (do_terminate) { assert(!sp); state = Thread::TERMINATED; + lock_release(&sleepLock); return; } - if (state == Thread::INITIALIZING) - state = Thread::AVAILABLE; - - // Grab the lock to avoid races with Thread::wake_up() - lock_grab(&sleepLock); - // If we are master and all slaves have finished don't go to sleep if (sp && all_slaves_finished(sp)) { diff --git a/src/thread.cpp b/src/thread.cpp index 5c10eee0..e631645b 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -135,7 +135,7 @@ void ThreadsManager::set_size(int cnt) { void ThreadsManager::init() { - // Threads will sent to sleep as soon as created, only main thread is kept alive + // Threads will go to sleep as soon as created, only main thread is kept alive set_size(1); threads[0].state = Thread::SEARCHING; threads[0].threadID = 0; @@ -159,7 +159,7 @@ void ThreadsManager::init() { // Create and startup all the threads but the main that is already running for (int i = 1; i < MAX_THREADS; i++) { - threads[i].state = Thread::INITIALIZING; + threads[i].state = Thread::AVAILABLE; threads[i].threadID = i; #if defined(_MSC_VER) @@ -174,9 +174,6 @@ void ThreadsManager::init() { std::cout << "Failed to create thread number " << i << std::endl; ::exit(EXIT_FAILURE); } - - // Wait until the thread has finished launching and is gone to sleep - while (threads[i].state == Thread::INITIALIZING) {} } } diff --git a/src/thread.h b/src/thread.h index 3a2d8538..aba43c90 100644 --- a/src/thread.h +++ b/src/thread.h @@ -67,7 +67,6 @@ struct Thread { enum ThreadState { - INITIALIZING, // Thread is initializing itself SEARCHING, // Thread is performing work AVAILABLE, // Thread is waiting for work WORKISWAITING, // Master has ordered us to start searching -- 2.39.2