49 "Threading using Boost.");
56 : m_numThreads(numT), m_numWorkers(numT), m_masterQueue(),
57 m_masterQueueMutex(), m_masterActiveMutex(), m_masterQueueCondVar(),
58 m_masterActiveCondVar(), m_chunkSize(1), m_schedType(
e_dynamic),
71 cerr <<
"Exception while allocating thread storage: " << e.what()
85 cerr <<
"Exception while allocating worker threads: " << e.what()
102 std::cerr <<
"Exception while creating worker threads" << std::endl;
109 m_type =
"Threading with Boost";
146 std::vector<ThreadJob *>::iterator it;
147 for (it = joblist.begin(); it < joblist.end(); ++it)
168 bool working =
false;
200 boost::thread::id
id = boost::this_thread::get_id();
236 boost::thread::id
id = boost::this_thread::get_id();
253 m_barrier =
new boost::barrier(num > 0 ? num : 1);
270 n = std::max(n,
static_cast<unsigned int>(0));
314 unsigned int workerNum)
315 : m_threadManager(tm), m_workerQueue(), m_keepgoing(true),
316 m_threadNum(workerNum)
328 std::cerr <<
"Warning: ThreadWorker: " <<
m_threadNum
329 <<
"destroyed while running!" << std::endl;
374 unsigned int numToLoad = 0;
378 numToLoad = std::max(
380 static_cast<unsigned long>(
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mode...
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
Base class for tasks to be sent to the ThreadManager to run.
void SetWorkerNum(unsigned int num)
Set number of worker threads.
Implementation of ThreadManager using Boost threads.
virtual void v_QueueJob(ThreadJob *job) override
boost::mutex m_masterQueueMutex
ThreadWorkerBoost ** m_threadList
virtual const std::string & v_GetType() const override
virtual ~ThreadManagerBoost()
Shuts down threading.
bool * m_threadActiveList
virtual unsigned int v_GetMaxNumWorkers() override
virtual void v_SetChunkSize(unsigned int chnk) override
virtual void v_SetSchedType(SchedType s) override
boost::condition_variable m_masterQueueCondVar
virtual bool v_InThread() override
virtual unsigned int v_GetNumWorkers() override
boost::thread::id m_masterThreadId
const unsigned int m_numThreads
std::queue< ThreadJob * > m_masterQueue
static ThreadManagerSharedPtr Create(unsigned int numT)
Called by the factory method.
virtual void v_Wait() override
std::map< boost::thread::id, unsigned int > m_threadMap
virtual unsigned int v_GetWorkerNum() override
friend class ThreadWorkerBoost
static std::string className
virtual void v_Hold() override
void SetNumWorkersImpl(const unsigned int num)
virtual void v_SetNumWorkers() override
unsigned int m_numWorkers
virtual void v_QueueJobs(std::vector< ThreadJob * > &joblist) override
boost::barrier * m_barrier
boost::thread ** m_threadThreadList
boost::condition_variable m_masterActiveCondVar
boost::mutex m_masterActiveMutex
void QueueJob(ThreadJob *job)
Pass a single job to the master queue.
Implementation class for ThreadManagerBoost.
~ThreadWorkerBoost()
Destructor.
void Stop()
A signal to shut down.
std::queue< ThreadJob * > m_workerQueue
unsigned int GetNumToLoad()
ThreadManagerBoost * m_threadManager
SchedType
Identifies the algorithm for scheduling.
ThreadManagerFactory & GetThreadManagerFactory()
boost::unique_lock< boost::mutex > Lock
The above copyright notice and this permission notice shall be included.