Helios++
Helios software for LiDAR simulations
SharedTaskSequencer.h
1 #pragma once
2 
3 #include <SharedSubTaskCompletionHandler.h>
4 #include <SharedSubTask.h>
5 
6 #include <boost/thread.hpp>
7 
8 #include <memory>
9 #include <unordered_map>
10 
11 using std::size_t;
12 using std::unordered_map;
13 
24 protected:
25  // *** ATTRIBUTES *** //
26  // ******************** //
32  size_t maxThreads = 0;
36  size_t availableThreads = 0;
47  unordered_map<size_t, std::shared_ptr<SharedSubTask>> subTasks;
51  boost::mutex mtx;
55  boost::condition_variable condvar;
56 
57 public:
58  // *** CONSTRUCTION / DESTRUCTION *** //
59  // ************************************ //
64  explicit SharedTaskSequencer(size_t const maxThreads) :
68  {}
69  virtual ~SharedTaskSequencer() = default;
70 
71  // *** SHARED TASK HANDLING *** //
72  // ****************************** //
79  virtual void start(std::shared_ptr<SharedSubTask> subTask);
88  virtual void startThread(std::shared_ptr<SharedSubTask> subTask);
93  void onSharedSubTaskCompletion(size_t const key) override;
97  virtual void joinAll();
98 
99 };
Interface declaring behaviors that must be implemented by any class capable of handling completion of...
Definition: SharedSubTaskCompletionHandler.h:13
Class providing core implementation of a shared task sequencer. It is a sequencer which launches shar...
Definition: SharedTaskSequencer.h:23
unordered_map< size_t, std::shared_ptr< SharedSubTask > > subTasks
The collection of running shared sub-tasks.
Definition: SharedTaskSequencer.h:47
SharedTaskSequencer(size_t const maxThreads)
Default constructor for shared task sequencer.
Definition: SharedTaskSequencer.h:64
size_t nextSharedSubTaskKey
Key of next shared sub-task to be inserted.
Definition: SharedTaskSequencer.h:40
virtual void start(std::shared_ptr< SharedSubTask > subTask)
Start given shared sub-task.
Definition: SharedTaskSequencer.cpp:6
boost::condition_variable condvar
Condition variable to handle concurrent start of sub-tasks.
Definition: SharedTaskSequencer.h:55
virtual void joinAll()
Wait until all pending sub-tasks have been finished.
Definition: SharedTaskSequencer.cpp:45
size_t maxThreads
Maximum number of supported concurrent threads.
Definition: SharedTaskSequencer.h:32
size_t availableThreads
How many threads there are available to compute a task.
Definition: SharedTaskSequencer.h:36
virtual void startThread(std::shared_ptr< SharedSubTask > subTask)
Assist the start method to start a shared sub-task by wrapping it into a SmartSharedFunctorContainer.
Definition: SharedTaskSequencer.cpp:25
void onSharedSubTaskCompletion(size_t const key) override
Handle completion of each shared sub-task.
Definition: SharedTaskSequencer.cpp:34
boost::mutex mtx
Mutex to handle concurrent start of sub-tasks.
Definition: SharedTaskSequencer.h:51