summaryrefslogtreecommitdiff
path: root/scheduler.h
diff options
context:
space:
mode:
Diffstat (limited to 'scheduler.h')
-rw-r--r--scheduler.h40
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();
+};