{
std::unique_lock<std::mutex> lock(m_mutex);
if (!m_shutting_down && m_task_queue.size() >= m_task_queue_max_size) {
- m_task_popped_condition.wait(lock, [this] {
+ m_producer_cv.wait(lock, [this] {
return m_shutting_down || m_task_queue.size() < m_task_queue_max_size;
});
}
}
m_task_queue.emplace(std::move(function));
}
- m_task_enqueued_or_shutting_down_condition.notify_one();
+ m_worker_cv.notify_one();
}
void
}
m_shutting_down = true;
}
- m_task_enqueued_or_shutting_down_condition.notify_all();
- m_task_popped_condition.notify_all();
+ m_worker_cv.notify_all();
+ m_producer_cv.notify_all();
for (auto& thread : m_worker_threads) {
if (thread.joinable()) {
thread.join();
{
std::unique_lock<std::mutex> lock(m_mutex);
- m_task_enqueued_or_shutting_down_condition.wait(
+ m_worker_cv.wait(
lock, [this] { return m_shutting_down || !m_task_queue.empty(); });
if (m_shutting_down && m_task_queue.empty()) {
return;
m_task_queue.pop();
}
- m_task_popped_condition.notify_one();
+ m_producer_cv.notify_one();
try {
task();
} catch (const std::exception& e) {
size_t m_task_queue_max_size;
bool m_shutting_down = false;
std::mutex m_mutex;
- std::condition_variable m_task_enqueued_or_shutting_down_condition;
- std::condition_variable m_task_popped_condition;
+ std::condition_variable m_worker_cv;
+ std::condition_variable m_producer_cv;
void worker_thread_main();
};