1 #pragma once
2 
3 #include <mbgl/actor/scheduler.hpp>
4 
5 #include <condition_variable>
6 #include <mutex>
7 #include <queue>
8 #include <thread>
9 
10 namespace mbgl {
11 
12 class ThreadPool : public Scheduler {
13 public:
14     ThreadPool(std::size_t count);
15     ~ThreadPool() override;
16 
17     void schedule(std::weak_ptr<Mailbox>) override;
18 
19 private:
20     std::vector<std::thread> threads;
21     std::queue<std::weak_ptr<Mailbox>> queue;
22     std::mutex mutex;
23     std::condition_variable cv;
24     bool terminate { false };
25 };
26 
27 } // namespace mbgl
28