Bitcoin
|
#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 () | |
Public Attributes | |
boost::mutex | ControlMutex |
Mutex to ensure only one concurrent CCheckQueueControl. More... | |
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 |
unsigned int | nBatchSize |
The maximum number of elements to be processed in one batch. More... | |
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.
|
inlineexplicit |
Create a new check queue.
|
inline |
|
inline |
Add a batch of checks to the queue.
|
inlineprivate |
Internal function that does bulk of the verification work.
|
inline |
Worker thread.
|
inline |
Wait until execution finishes, and return whether all evaluations were successful.
|
private |
Master thread blocks on this when out of work.
|
private |
Worker threads block on this when out of work.
boost::mutex CCheckQueue< T >::ControlMutex |
Mutex to ensure only one concurrent CCheckQueueControl.
|
private |
The temporary evaluation result.
|
private |
Mutex to protect the inner state.
|
private |
The maximum number of elements to be processed in one batch.
|
private |
The number of workers (including the master) that are idle.
|
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.
|
private |
The total number of workers (including the master).
|
private |
The queue of elements to be processed. As the order of booleans doesn't matter, it is used as a LIFO (stack)