FairRoot/PandaRoot
Public Member Functions | Private Types | Static Private Member Functions | Private Attributes | List of all members
PndLmdThreadPool Class Reference

#include <PndLmdThreadPool.h>

Public Member Functions

 PndLmdThreadPool ()
 
 PndLmdThreadPool (unsigned int maxThreads)
 
void enqueue (job_t job)
 
boost::optional< job_tdequeue ()
 
void wait ()
 
 ~PndLmdThreadPool ()
 

Private Types

typedef boost::function< void()> job_t
 

Static Private Member Functions

static void worker_thread (PndLmdThreadPool &q)
 

Private Attributes

boost::mutex mx
 
boost::condition_variable cv
 
std::deque< job_t_queue
 
boost::thread_group pool
 
boost::atomic_bool shutdown
 

Detailed Description

Definition at line 18 of file PndLmdThreadPool.h.

Member Typedef Documentation

typedef boost::function<void()> PndLmdThreadPool::job_t
private

Definition at line 23 of file PndLmdThreadPool.h.

Constructor & Destructor Documentation

PndLmdThreadPool::PndLmdThreadPool ( )
inline

Definition at line 36 of file PndLmdThreadPool.h.

References i.

36  :
37  shutdown(false) {
38  for (unsigned i = 0; i < boost::thread::hardware_concurrency(); ++i)
39  pool.create_thread(boost::bind(worker_thread, boost::ref(*this)));
40  }
Int_t i
Definition: run_full.C:25
static void worker_thread(PndLmdThreadPool &q)
boost::atomic_bool shutdown
boost::thread_group pool
PndLmdThreadPool::PndLmdThreadPool ( unsigned int  maxThreads)
inline

Definition at line 43 of file PndLmdThreadPool.h.

References i.

43  :
44  shutdown(false) {
45  if (maxThreads > boost::thread::hardware_concurrency() || maxThreads == 0) maxThreads =
46  boost::thread::hardware_concurrency();
47  for (unsigned i = 0; i < maxThreads; ++i)
48  pool.create_thread(boost::bind(worker_thread, boost::ref(*this)));
49  }
Int_t i
Definition: run_full.C:25
static void worker_thread(PndLmdThreadPool &q)
boost::atomic_bool shutdown
boost::thread_group pool
PndLmdThreadPool::~PndLmdThreadPool ( )
inline

Definition at line 77 of file PndLmdThreadPool.h.

77  {
78  shutdown = true;
79  {
80  boost::lock_guard<boost::mutex> lk(mx);
81  cv.notify_all();
82  }
83  pool.join_all();
84  }
boost::condition_variable cv
boost::atomic_bool shutdown
boost::thread_group pool

Member Function Documentation

boost::optional<job_t> PndLmdThreadPool::dequeue ( )
inline

Definition at line 57 of file PndLmdThreadPool.h.

Referenced by worker_thread().

57  {
58  boost::unique_lock<boost::mutex> lk(mx);
59  namespace phx = boost::phoenix;
60  cv.wait(lk, phx::ref(shutdown) || !phx::empty(phx::ref(_queue)));
61  if (_queue.empty()) return boost::none;
62  job_t job = _queue.front();
63  _queue.pop_front();
64  return job;
65  }
std::deque< job_t > _queue
boost::condition_variable cv
boost::atomic_bool shutdown
boost::function< void()> job_t
void PndLmdThreadPool::enqueue ( job_t  job)
inline

Definition at line 51 of file PndLmdThreadPool.h.

Referenced by PndLmdAlignManager::addPairAndStartAligner(), PndLmdAlignManager::readPairsFromBinaryFilesAndAlign(), and PndLmdAlignManager::waitForCompletion().

51  {
52  boost::lock_guard<boost::mutex> lk(mx);
53  _queue.push_back(job);
54  cv.notify_one();
55  }
std::deque< job_t > _queue
boost::condition_variable cv
void PndLmdThreadPool::wait ( )
inline

Definition at line 68 of file PndLmdThreadPool.h.

Referenced by PndLmdAlignManager::waitForCompletion().

68  {
69  shutdown = true;
70  {
71  boost::lock_guard<boost::mutex> lk(mx);
72  cv.notify_all();
73  }
74  pool.join_all();
75  }
boost::condition_variable cv
boost::atomic_bool shutdown
boost::thread_group pool
static void PndLmdThreadPool::worker_thread ( PndLmdThreadPool q)
inlinestaticprivate

Definition at line 29 of file PndLmdThreadPool.h.

References dequeue().

29  {
30  while (boost::optional<job_t> job = q.dequeue())
31  (*job)();
32  }
boost::optional< job_t > dequeue()

Member Data Documentation

std::deque<job_t> PndLmdThreadPool::_queue
private

Definition at line 24 of file PndLmdThreadPool.h.

boost::condition_variable PndLmdThreadPool::cv
private

Definition at line 21 of file PndLmdThreadPool.h.

boost::mutex PndLmdThreadPool::mx
private

Definition at line 20 of file PndLmdThreadPool.h.

boost::thread_group PndLmdThreadPool::pool
private

Definition at line 26 of file PndLmdThreadPool.h.

boost::atomic_bool PndLmdThreadPool::shutdown
private

Definition at line 28 of file PndLmdThreadPool.h.


The documentation for this class was generated from the following file: