#ifndef __HL_THREAD_POOL_H #define __HL_THREAD_POOL_H #include #include #include #include #include #include #include #include #include #include #include "HL_Sync.h" class thread_pool { public: typedef std::function task; thread_pool(size_t num_of_threads, const std::string&); ~thread_pool(); void enqueue(const task& task); private: // need to keep track of threads so we can join them std::vector< std::thread > workers; // the task queue std::queue< task > tasks; // synchronization std::mutex queue_mutex; std::condition_variable condition; bool stop = false; // thread name prefix for worker threads std::string name; void run_worker(); }; #endif