PandaRoot
PndLmdThreadPool Class Reference

#include <PndLmdThreadPool.h>

Public Member Functions

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

Detailed Description

Definition at line 18 of file PndLmdThreadPool.h.

Constructor & Destructor Documentation

◆ PndLmdThreadPool() [1/2]

PndLmdThreadPool::PndLmdThreadPool ( )
inline

Definition at line 37 of file PndLmdThreadPool.h.

References i.

37  : shutdown(false)
38  {
39  for (unsigned i = 0; i < boost::thread::hardware_concurrency(); ++i)
40  pool.create_thread(boost::bind(worker_thread, boost::ref(*this)));
41  }
unsigned int i
Definition: P4_F32vec4.h:21

◆ PndLmdThreadPool() [2/2]

PndLmdThreadPool::PndLmdThreadPool ( unsigned int  maxThreads)
inline

Definition at line 44 of file PndLmdThreadPool.h.

References i.

44  : shutdown(false)
45  {
46  if (maxThreads > boost::thread::hardware_concurrency() || maxThreads == 0)
47  maxThreads = boost::thread::hardware_concurrency();
48  for (unsigned i = 0; i < maxThreads; ++i)
49  pool.create_thread(boost::bind(worker_thread, boost::ref(*this)));
50  }
unsigned int i
Definition: P4_F32vec4.h:21

◆ ~PndLmdThreadPool()

PndLmdThreadPool::~PndLmdThreadPool ( )
inline

Definition at line 82 of file PndLmdThreadPool.h.

83  {
84  shutdown = true;
85  {
86  boost::lock_guard<boost::mutex> lk(mx);
87  cv.notify_all();
88  }
89  pool.join_all();
90  }

Member Function Documentation

◆ dequeue()

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

Definition at line 59 of file PndLmdThreadPool.h.

60  {
61  boost::unique_lock<boost::mutex> lk(mx);
62  namespace phx = boost::phoenix;
63  cv.wait(lk, phx::ref(shutdown) || !phx::empty(phx::ref(_queue)));
64  if (_queue.empty())
65  return boost::none;
66  job_t job = _queue.front();
67  _queue.pop_front();
68  return job;
69  }

◆ enqueue()

void PndLmdThreadPool::enqueue ( job_t  job)
inline

Definition at line 52 of file PndLmdThreadPool.h.

53  {
54  boost::lock_guard<boost::mutex> lk(mx);
55  _queue.push_back(job);
56  cv.notify_one();
57  }

◆ wait()

void PndLmdThreadPool::wait ( )
inline

Definition at line 72 of file PndLmdThreadPool.h.

73  {
74  shutdown = true;
75  {
76  boost::lock_guard<boost::mutex> lk(mx);
77  cv.notify_all();
78  }
79  pool.join_all();
80  }

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