diff --git a/modules/beast_basics/threads/beast_Workers.cpp b/modules/beast_basics/threads/beast_Workers.cpp index 81b956121f..4137462d1c 100644 --- a/modules/beast_basics/threads/beast_Workers.cpp +++ b/modules/beast_basics/threads/beast_Workers.cpp @@ -17,8 +17,9 @@ */ //============================================================================== -Workers::Workers (Callback& callback, int numberOfThreads) +Workers::Workers (Callback& callback, String const& threadNames, int numberOfThreads) : m_callback (callback) + , m_threadNames (threadNames) , m_allPaused (true, true) , m_semaphore (0) , m_numberOfThreads (0) @@ -66,7 +67,7 @@ void Workers::setNumberOfThreads (int numberOfThreads) } else { - worker = new Worker (*this); + worker = new Worker (*this, m_threadNames); } m_everyone.push_front (worker); @@ -130,8 +131,8 @@ void Workers::deleteWorkers (LockFreeStack & stack) //------------------------------------------------------------------------------ -Workers::Worker::Worker (Workers& workers) - : Thread ("Worker") +Workers::Worker::Worker (Workers& workers, String const& threadName) + : Thread (threadName) , m_workers (workers) { startThread (); @@ -186,6 +187,9 @@ void Workers::Worker::run () ++m_workers.m_runningTaskCount; m_workers.m_callback.processTask (); --m_workers.m_runningTaskCount; + + // Put the name back in case the callback changed it + Thread::setCurrentThreadName (m_threadName); } // Any worker that goes into the paused list must @@ -200,6 +204,8 @@ void Workers::Worker::run () if (--m_workers.m_activeCount == 0) m_workers.m_allPaused.signal (); + Thread::setCurrentThreadName (m_threadName + " (paused)"); + // [1] We will be here when the paused list is popped // // We block on our event object, a requirement of being @@ -246,7 +252,7 @@ public: TestCallback cb (threadCount); - Workers w (cb, 0); + Workers w (cb, "Test", 0); expect (w.getNumberOfThreads () == 0); w.setNumberOfThreads (threadCount); diff --git a/modules/beast_basics/threads/beast_Workers.h b/modules/beast_basics/threads/beast_Workers.h index f7be8f67d9..299e6e0778 100644 --- a/modules/beast_basics/threads/beast_Workers.h +++ b/modules/beast_basics/threads/beast_Workers.h @@ -43,8 +43,12 @@ public: A number of initial threads may be optionally specified. The default is to create one thread per CPU. + + @param threadNames The name given to each created worker thread. */ - explicit Workers (Callback& callback, int numberOfThreads = SystemStats::getNumCpus ()); + explicit Workers (Callback& callback, + String const& threadNames = "Worker", + int numberOfThreads = SystemStats::getNumCpus ()); ~Workers (); @@ -108,7 +112,7 @@ private: , public Thread { public: - explicit Worker (Workers& workers); + Worker (Workers& workers, String const& threadName); ~Worker (); @@ -117,6 +121,7 @@ private: private: Workers& m_workers; + String m_threadName; }; private: @@ -125,6 +130,7 @@ private: private: Callback& m_callback; WaitableEvent m_allPaused; // signaled when all threads paused + String m_threadNames; // The name to give each thread Semaphore m_semaphore; // each pending task is 1 resource int m_numberOfThreads; // how many we want active now Atomic m_activeCount; // to know when all are paused