From 0095f9ff69b0db34bb66d3566e0e4c054467e322 Mon Sep 17 00:00:00 2001 From: Stepan Usatiuk Date: Fri, 15 Mar 2024 22:37:02 +0100 Subject: [PATCH] Small ThreadPool improvements --- src/utils/srcs/ThreadPool.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/utils/srcs/ThreadPool.cpp b/src/utils/srcs/ThreadPool.cpp index 9e99a99..a7f7053 100644 --- a/src/utils/srcs/ThreadPool.cpp +++ b/src/utils/srcs/ThreadPool.cpp @@ -8,16 +8,17 @@ ThreadPool::ThreadPool(std::function onError, std::size_t wor } ThreadPool::~ThreadPool() { - stop = true; - somethingNew.notify_all(); + { + std::lock_guard lock(queueLock); + stop = true; + somethingNew.notify_all(); + } for (auto &t: threads) { t.join(); } } void ThreadPool::push(std::function &&func) { - { - std::lock_guard lock(queueLock); - queue.push(std::move(func)); - } + std::lock_guard lock(queueLock); + queue.push(std::move(func)); somethingNew.notify_one(); } @@ -43,16 +44,13 @@ void ThreadPool::loop() { queue.pop(); qLock.unlock(); - try { task(); } catch (std::exception &e) { onError(std::string(e.what())); } + qLock.lock(); - { - std::lock_guard qLock(queueLock); - running--; - if (queue.empty() && running == 0) { finished.notify_all(); } - } + running--; + if (queue.empty() && running == 0) { finished.notify_all(); } } }