Fixing up threadpool

This commit is contained in:
Ian Roddis
2021-06-20 10:33:35 -03:00
parent 1003e88303
commit 209ec6f380
4 changed files with 32 additions and 14 deletions

View File

@@ -22,7 +22,7 @@ namespace daggy {
std::future<void> addTask(AsyncTask fn);
private:
using QueuedAsyncTask = std::shared_ptr<AsyncTask>;
using QueuedAsyncTask = std::shared_ptr<std::packaged_task<void()>>;
std::atomic<bool> shutdown_;
std::mutex guard_;

View File

@@ -13,7 +13,9 @@ ThreadPool::ThreadPool(size_t nWorkers) {
std::unique_lock<std::mutex> lk(guard_);
cv_.wait(lk, []{ return true; });
if (shutdown_) return;
tsk.swap(taskQueue_.front());
if (taskQueue_.empty()) continue;
tsk = taskQueue_.front();
taskQueue_.pop_front();
}
@@ -41,7 +43,7 @@ std::future<void> ThreadPool::addTask(std::function<void()> fn) {
std::future<void> result = task->get_future();
{
std::unique_lock<std::mutex> lk(guard_);
taskQueue_.emplace_back(std::move(task));
taskQueue_.push_back(task);
}
cv_.notify_one();
return result;