Avoid excessive lock contention in CCheckQueue::Add

This commit is contained in:
Hennadii Stepanov committed 2021-11-03 11:26:49 +02:00
1 parent 7efc628539
commit c43aa62343
1 file changed
+8 -5
+8 -5
View File
@@ -167,12 +167,15 @@ public:
//! Add a batch of checks to the queue //! Add a batch of checks to the queue
void Add(std::vector<T>& vChecks) void Add(std::vector<T>& vChecks)
{ {
LOCK(m_mutex); {
for (T& check : vChecks) { LOCK(m_mutex);
queue.push_back(T()); for (T& check : vChecks) {
check.swap(queue.back()); queue.emplace_back();
check.swap(queue.back());
}
nTodo += vChecks.size();
} }
nTodo += vChecks.size();
if (vChecks.size() == 1) if (vChecks.size() == 1)
m_worker_cv.notify_one(); m_worker_cv.notify_one();
else if (vChecks.size() > 1) else if (vChecks.size() > 1)