My Project
|
Handles where a given tasklet is run. More...
#include <tasklets.hpp>
Public Member Functions | |
TaskletRunner (const TaskletRunner &)=delete | |
TaskletRunner (unsigned numWorkers) | |
Creates a tasklet runner with numWorkers underling threads for doing work. | |
~TaskletRunner () | |
Destructor. | |
bool | failure () const |
int | workerThreadIndex () const |
Returns the index of the current worker thread. | |
int | numWorkerThreads () const |
Returns the number of worker threads for the tasklet runner. | |
void | dispatch (std::shared_ptr< TaskletInterface > tasklet) |
Add a new tasklet. | |
template<class Fn > | |
std::shared_ptr< FunctionRunnerTasklet< Fn > > | dispatchFunction (Fn &fn, int numInvocations=1) |
Convenience method to construct a new function runner tasklet and dispatch it immediately. | |
void | barrier () |
Make sure that all tasklets have been completed after this method has been called. | |
Protected Member Functions | |
void | run_ () |
do the work until the queue received an end tasklet | |
Static Protected Member Functions | |
static void | startWorkerThread_ (TaskletRunner *taskletRunner, int workerThreadIndex) |
Protected Attributes | |
std::vector< std::unique_ptr< std::thread > > | threads_ |
std::queue< std::shared_ptr< TaskletInterface > > | taskletQueue_ |
std::mutex | taskletQueueMutex_ |
std::condition_variable | workAvailableCondition_ |
Static Protected Attributes | |
static thread_local TaskletRunner * | taskletRunner_ = nullptr |
static thread_local int | workerThreadIndex_ = -1 |
Handles where a given tasklet is run.
Depending on the number of worker threads, a tasklet can either be run in a separate worker thread or by the main thread.
Opm::TaskletRunner::TaskletRunner | ( | unsigned | numWorkers | ) |
Creates a tasklet runner with numWorkers underling threads for doing work.
The number of worker threads may be 0. In this case, all work is done by the main thread (synchronous mode).
Opm::TaskletRunner::~TaskletRunner | ( | ) |
Destructor.
If worker threads were created to run the tasklets, this method waits until all worker threads have been terminated, i.e. all scheduled tasklets are guaranteed to be completed.
void Opm::TaskletRunner::dispatch | ( | std::shared_ptr< TaskletInterface > | tasklet | ) |
Add a new tasklet.
The tasklet is either run immediately or deferred to a separate thread.
int Opm::TaskletRunner::workerThreadIndex | ( | ) | const |
Returns the index of the current worker thread.
If the current thread is not a worker thread, -1 is returned.