diff options
Diffstat (limited to 'scheduler.h')
-rw-r--r-- | scheduler.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/scheduler.h b/scheduler.h new file mode 100644 index 0000000..95da7c7 --- /dev/null +++ b/scheduler.h @@ -0,0 +1,40 @@ +#pragma once + +#include <functional> +#include <queue> +#include <vector> +#include <thread> +#include <mutex> + +using namespace std; + + +class Scheduler { + struct Job { + function<void()> callback; + + Job(const function<void()> callback) + : callback(callback) {} + }; + + queue<Job*> jobs; + bool finishFlag = false; + mutex commMut; + + bool hasJoined = false; + + vector<thread> workers; + + void workerEntry(); + +public: + const int nthreads; + + Scheduler(int nthreads); + ~Scheduler(); + + // func is run in child thread + void submit(const function<void()> &func); + + void finish(); +}; |