Pool.h
682 Bytes
#pragma once
#include <atomic>
#include <cassert>
#include <condition_variable>
#include <functional>
#include <mutex>
#include <queue>
class Pool
{
private:
std::queue<std::function<void()>> m_function_queue;
std::mutex m_lock;
std::condition_variable m_data_condition;
std::atomic<bool> m_accept_functions;
public:
Pool();
~Pool();
std::mutex& get_mutex_reference(void);
void push(std::function<void()> func);
void done();
void infinite_loop_func();
};
inline std::mutex &Pool::get_mutex_reference(void) { return m_lock; }
class quit_worker_exception : public std::exception {};