summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/work.h12
-rw-r--r--lib/worker.cpp5
-rw-r--r--lib/worker.h4
3 files changed, 3 insertions, 18 deletions
diff --git a/lib/work.h b/lib/work.h
deleted file mode 100644
index c780e13..0000000
--- a/lib/work.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#pragma once
-
-#include <special_members.hpp>
-
-class Work {
-public:
- virtual ~Work() = default;
- NO_COPY(Work);
- NO_MOVE(Work);
-
- virtual void doWork() = 0;
-};
diff --git a/lib/worker.cpp b/lib/worker.cpp
index cf59f56..4f1352d 100644
--- a/lib/worker.cpp
+++ b/lib/worker.cpp
@@ -9,16 +9,13 @@ Worker Worker::instance;
Worker::Worker() : todoLen {0}
{
std::generate_n(std::back_inserter(threads), std::thread::hardware_concurrency(), [this]() {
- return std::thread {&Worker::worker, this};
+ return std::jthread {&Worker::worker, this};
});
}
Worker::~Worker()
{
todoLen.release(std::thread::hardware_concurrency());
- std::for_each(threads.begin(), threads.end(), [](auto & th) {
- th.join();
- });
}
void
diff --git a/lib/worker.h b/lib/worker.h
index 136c50e..96593d9 100644
--- a/lib/worker.h
+++ b/lib/worker.h
@@ -33,13 +33,13 @@ private:
private:
void worker();
- using Threads = std::vector<std::thread>;
+ using Threads = std::vector<std::jthread>;
using ToDo = std::deque<WorkPtr>;
- Threads threads;
ToDo todo;
std::counting_semaphore<16> todoLen;
std::mutex todoMutex;
+ Threads threads;
static Worker instance;
};