|
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.
|
explicit |
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.