From 96a58cc251354954241aa2c9008b25d98daaad92 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Tue, 19 Jan 2021 20:35:29 +0000 Subject: Add basic work and worker thread pool Well... that requires GCC 11 cos 10 doesn't implement semaphore. --- lib/worker.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 lib/worker.h (limited to 'lib/worker.h') diff --git a/lib/worker.h b/lib/worker.h new file mode 100644 index 0000000..5a13138 --- /dev/null +++ b/lib/worker.h @@ -0,0 +1,46 @@ +#ifndef WORKER_H +#define WORKER_H + +#include +#include +#include +#include +#include +#include +#include +#include + +class Work; + +class Worker { +public: + Worker(); + ~Worker(); + + NO_COPY(Worker); + NO_MOVE(Worker); + + using WorkPtr = std::unique_ptr; + + template + void + addWork(Params &&... params) + { + addWork(std::make_unique(std::forward(params)...)); + } + + void addWork(WorkPtr w); + +private: + void worker(); + + using Threads = std::vector; + using ToDo = std::deque; + + Threads threads; + ToDo todo; + std::counting_semaphore<16> todoLen; + std::mutex todoMutex; +}; + +#endif -- cgit v1.2.3