Dash Core  0.12.2.1
P2P Digital Currency
CCheckQueue< T > Class Template Reference

#include <checkqueue.h>

Public Member Functions

 CCheckQueue (unsigned int nBatchSizeIn)
 Create a new check queue. More...
 
void Thread ()
 Worker thread. More...
 
bool Wait ()
 Wait until execution finishes, and return whether all evaluations were successful. More...
 
void Add (std::vector< T > &vChecks)
 Add a batch of checks to the queue. More...
 
 ~CCheckQueue ()
 
bool IsIdle ()
 

Private Member Functions

bool Loop (bool fMaster=false)
 

Private Attributes

boost::mutex mutex
 Mutex to protect the inner state. More...
 
boost::condition_variable condWorker
 Worker threads block on this when out of work. More...
 
boost::condition_variable condMaster
 Master thread blocks on this when out of work. More...
 
std::vector< T > queue
 
int nIdle
 The number of workers (including the master) that are idle. More...
 
int nTotal
 The total number of workers (including the master). More...
 
bool fAllOk
 The temporary evaluation result. More...
 
unsigned int nTodo
 
bool fQuit
 Whether we're shutting down. More...
 
unsigned int nBatchSize
 The maximum number of elements to be processed in one batch. More...
 

Detailed Description

template<typename T>
class CCheckQueue< T >

Queue for verifications that have to be performed. The verifications are represented by a type T, which must provide an operator(), returning a bool.

One thread (the master) is assumed to push batches of verifications onto the queue, where they are processed by N-1 worker threads. When the master is done adding work, it temporarily joins the worker pool as an N'th worker, until all jobs are done.

Definition at line 30 of file checkqueue.h.

Constructor & Destructor Documentation

◆ CCheckQueue()

template<typename T>
CCheckQueue< T >::CCheckQueue ( unsigned int  nBatchSizeIn)
inline

Create a new check queue.

Definition at line 131 of file checkqueue.h.

◆ ~CCheckQueue()

template<typename T>
CCheckQueue< T >::~CCheckQueue ( )
inline

Definition at line 160 of file checkqueue.h.

Member Function Documentation

◆ Add()

template<typename T>
void CCheckQueue< T >::Add ( std::vector< T > &  vChecks)
inline

Add a batch of checks to the queue.

Definition at line 146 of file checkqueue.h.

◆ IsIdle()

template<typename T>
bool CCheckQueue< T >::IsIdle ( )
inline

Definition at line 164 of file checkqueue.h.

◆ Loop()

template<typename T>
bool CCheckQueue< T >::Loop ( bool  fMaster = false)
inlineprivate

Internal function that does bulk of the verification work.

Definition at line 69 of file checkqueue.h.

Referenced by CCheckQueue< T >::Thread(), and CCheckQueue< T >::Wait().

◆ Thread()

template<typename T>
void CCheckQueue< T >::Thread ( )
inline

Worker thread.

Definition at line 134 of file checkqueue.h.

◆ Wait()

template<typename T>
bool CCheckQueue< T >::Wait ( )
inline

Wait until execution finishes, and return whether all evaluations were successful.

Definition at line 140 of file checkqueue.h.

Member Data Documentation

◆ condMaster

template<typename T>
boost::condition_variable CCheckQueue< T >::condMaster
private

Master thread blocks on this when out of work.

Definition at line 40 of file checkqueue.h.

Referenced by CCheckQueue< T >::Loop().

◆ condWorker

template<typename T>
boost::condition_variable CCheckQueue< T >::condWorker
private

Worker threads block on this when out of work.

Definition at line 37 of file checkqueue.h.

Referenced by CCheckQueue< T >::Add(), and CCheckQueue< T >::Loop().

◆ fAllOk

template<typename T>
bool CCheckQueue< T >::fAllOk
private

The temporary evaluation result.

Definition at line 53 of file checkqueue.h.

Referenced by CCheckQueue< T >::IsIdle(), and CCheckQueue< T >::Loop().

◆ fQuit

template<typename T>
bool CCheckQueue< T >::fQuit
private

Whether we're shutting down.

Definition at line 63 of file checkqueue.h.

Referenced by CCheckQueue< T >::Loop().

◆ mutex

template<typename T>
boost::mutex CCheckQueue< T >::mutex
private

Mutex to protect the inner state.

Definition at line 34 of file checkqueue.h.

Referenced by CCheckQueue< T >::Add(), CCheckQueue< T >::IsIdle(), and CCheckQueue< T >::Loop().

◆ nBatchSize

template<typename T>
unsigned int CCheckQueue< T >::nBatchSize
private

The maximum number of elements to be processed in one batch.

Definition at line 66 of file checkqueue.h.

Referenced by CCheckQueue< T >::Loop().

◆ nIdle

template<typename T>
int CCheckQueue< T >::nIdle
private

The number of workers (including the master) that are idle.

Definition at line 47 of file checkqueue.h.

Referenced by CCheckQueue< T >::IsIdle(), and CCheckQueue< T >::Loop().

◆ nTodo

template<typename T>
unsigned int CCheckQueue< T >::nTodo
private

Number of verifications that haven't completed yet. This includes elements that are no longer queued, but still in the worker's own batches.

Definition at line 60 of file checkqueue.h.

Referenced by CCheckQueue< T >::Add(), CCheckQueue< T >::IsIdle(), and CCheckQueue< T >::Loop().

◆ nTotal

template<typename T>
int CCheckQueue< T >::nTotal
private

The total number of workers (including the master).

Definition at line 50 of file checkqueue.h.

Referenced by CCheckQueue< T >::IsIdle(), and CCheckQueue< T >::Loop().

◆ queue

template<typename T>
std::vector<T> CCheckQueue< T >::queue
private

The queue of elements to be processed. As the order of booleans doesn't matter, it is used as a LIFO (stack)

Definition at line 44 of file checkqueue.h.

Referenced by CCheckQueue< T >::Add(), and CCheckQueue< T >::Loop().


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