3 #include <geneial/utility/ExecutionManager.h>
12 #include <condition_variable>
16 geneial_private_namespace(geneial)
18 geneial_private_namespace(utility)
21 geneial_export_namespace
24 class ThreadedExecutionManager:
public BaseExecutionManager
27 std::deque<std::function<void()>> _tasks;
31 std::vector<std::shared_ptr<std::thread>> _threads;
35 std::condition_variable _condEntry;
37 std::condition_variable _condExit;
41 void inline executor();
43 void inline initializeThreads(
const unsigned int amountThreads);
45 unsigned int _amountPerThread = 1;
49 explicit ThreadedExecutionManager(
const unsigned int amountThreads) :
50 _tasks(), _threads(), _mutex(), _condEntry(), _finish(false),_amountPerThread(1)
52 initializeThreads(amountThreads);
55 ThreadedExecutionManager() :
56 _tasks(), _threads(), _mutex(), _condEntry(), _finish(false),_amountPerThread(1)
59 std::max(static_cast<unsigned int>(1),
60 static_cast<unsigned int>(std::thread::hardware_concurrency() - 1)));
63 virtual ~ThreadedExecutionManager()
68 virtual inline void addTask(std::function<
void()>
const &task)
override;
70 virtual inline void waitForTasks()
override;
72 void inline joinAll();
74 unsigned int getAmountPerThread()
const
76 return _amountPerThread;
83 void setAmountPerThread(
unsigned int amountPerThread = 1)
85 _amountPerThread = amountPerThread;
93 #include <geneial/utility/ThreadedExecutionManager.hpp>