mirror-ac/module/dispatcher/threadpool.h

30 lines
707 B
C
Raw Normal View History

#pragma once
#include <functional>
#include <mutex>
#include <queue>
#include <vector>
namespace dispatcher {
/*
* This ThreadPool class is a simple threadpool implementation that will allow
* us to delegate jobs to a set number of threads without the constant need to
* close and open new threads.
*/
class thread_pool {
int thread_count;
bool should_terminate;
std::mutex queue_mutex;
std::condition_variable mutex_condition;
std::vector<std::thread> threads;
std::queue<std::function<void()>> jobs;
void wait_for_task();
public:
thread_pool(int thread_count);
void queue_job(const std::function<void()> &job);
void terminate();
bool busy_wait();
};
} // namespace dispatcher