aboutsummaryrefslogtreecommitdiff
path: root/lib/executor.cc
diff options
context:
space:
mode:
authorjohannst <johannes.stoelp@gmail.com>2020-09-28 00:23:30 +0200
committerjohannst <johannes.stoelp@gmail.com>2020-09-28 00:23:30 +0200
commit38d7af6768871a5d285e776bbcfe18b6e7440cfb (patch)
tree7af3c627261085bb02fa3ff0f3c0d2f1993ab95c /lib/executor.cc
parente948a05981a9136b25f5723040d8060a6a3bc328 (diff)
downloadmatcha-threads-38d7af6768871a5d285e776bbcfe18b6e7440cfb.tar.gz
matcha-threads-38d7af6768871a5d285e776bbcfe18b6e7440cfb.zip
replace vector with fwd list
Diffstat (limited to 'lib/executor.cc')
-rw-r--r--lib/executor.cc15
1 files changed, 9 insertions, 6 deletions
diff --git a/lib/executor.cc b/lib/executor.cc
index af49f0e..8977ee3 100644
--- a/lib/executor.cc
+++ b/lib/executor.cc
@@ -6,16 +6,19 @@
namespace nMatcha {
void Executor::spawn(std::unique_ptr<Thread> t) {
- mThreads.push_back(std::move(t));
- mThreads.back()->mExecutor = this;
+ mThreads.push_front(std::move(t));
+ mThreads.front()->mExecutor = this;
}
void Executor::run() {
- for (const std::unique_ptr<Thread>& t : mThreads) {
- if (t->isFinished()) {
- continue;
+ while (!mThreads.empty()) {
+ for (const std::unique_ptr<Thread>& t : mThreads) {
+ if (!t->isFinished()) {
+ yield_to(t.get());
+ }
}
- yield_to(t.get());
+
+ mThreads.remove_if([](const std::unique_ptr<Thread>& t) { return t->isFinished(); });
}
}