#ifndef MBGL_UTIL_THREADPOOL #define MBGL_UTIL_THREADPOOL #include #include #include namespace mbgl { namespace util { class Threadpool { private: class Worker { public: Worker(Threadpool& pool); ~Worker(); static void *loop(void *ptr); private: Threadpool& pool; pthread_t thread; }; public: Threadpool(int max_workers = 4); typedef void (*Callback)(void *); void add(Callback callback, void *data); private: typedef std::pair Task; const int max_workers; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t condition = PTHREAD_COND_INITIALIZER; std::forward_list workers; int worker_count = 0; std::queue tasks; }; extern std::unique_ptr threadpool; } } #endif