diff --git a/common/concurrent_queue.h b/common/concurrent_queue.h index 5be10b0d..d862bf3d 100644 --- a/common/concurrent_queue.h +++ b/common/concurrent_queue.h @@ -34,13 +34,13 @@ public: void enqueue(std::function job) { { - std::lock_guard lock(queueMutex); - _queue.emplace(job); + std::lock_guard lock(jobsLeftMutex); + ++jobsLeft; } { - std::lock_guard lock(jobsLeftMutex); - ++jobsLeft; + std::lock_guard lock(queueMutex); + _queue.emplace(job); } jobAvailableVar.notify_one(); @@ -78,7 +78,7 @@ public: private: std::vector threads; std::queue> _queue; - int jobsLeft; + int jobsLeft; //!< @invariant jobsLeft >= _queue.size() bool bailout; std::condition_variable jobAvailableVar; std::condition_variable _waitVar;