mirror of
https://github.com/yhirose/cpp-httplib.git
synced 2025-05-15 01:08:27 +00:00
std::condition_variable::notify_one/all() should be called after unlocking mutex (#1448)
* Move next job in task queue rather than copy * Notify waiting thread after unlocking mutex * Add unit test for TaskQueue * Don't use C++14 feature in test code
This commit is contained in:
parent
8f32271e8c
commit
58cffd3223
2 changed files with 24 additions and 4 deletions
12
httplib.h
12
httplib.h
|
@ -549,8 +549,11 @@ public:
|
|||
~ThreadPool() override = default;
|
||||
|
||||
void enqueue(std::function<void()> fn) override {
|
||||
std::unique_lock<std::mutex> lock(mutex_);
|
||||
jobs_.push_back(std::move(fn));
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(mutex_);
|
||||
jobs_.push_back(std::move(fn));
|
||||
}
|
||||
|
||||
cond_.notify_one();
|
||||
}
|
||||
|
||||
|
@ -559,9 +562,10 @@ public:
|
|||
{
|
||||
std::unique_lock<std::mutex> lock(mutex_);
|
||||
shutdown_ = true;
|
||||
cond_.notify_all();
|
||||
}
|
||||
|
||||
cond_.notify_all();
|
||||
|
||||
// Join...
|
||||
for (auto &t : threads_) {
|
||||
t.join();
|
||||
|
@ -583,7 +587,7 @@ private:
|
|||
|
||||
if (pool_.shutdown_ && pool_.jobs_.empty()) { break; }
|
||||
|
||||
fn = pool_.jobs_.front();
|
||||
fn = std::move(pool_.jobs_.front());
|
||||
pool_.jobs_.pop_front();
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue