19 #include <condition_variable> 28 #define MAX_THREAD_NUM 4 38 std::lock_guard<std::mutex> lock(m_mutex);
44 std::lock_guard<std::mutex> lock(m_mutex);
51 std::lock_guard<std::mutex> lock(m_mutex);
60 mutable std::mutex m_mutex;
73 typedef std::shared_ptr<ThreadPool>
Ptr;
79 static Ptr getInstance();
81 template <
class F,
class... Args>
82 inline auto commit(F &&f, Args &&... args)
83 -> std::future<decltype(f(args...))> {
85 throw std::runtime_error(
"Commit on ThreadPool is stopped.");
86 using RetType = decltype(f(args...));
87 auto task = std::make_shared<std::packaged_task<RetType()>>(
88 std::bind(std::forward<F>(f), std::forward<Args>(args)...));
89 std::future<RetType> future = task->get_future();
91 std::lock_guard<std::mutex> lock{m_lock};
92 tasks.emplace([task]() { (*task)(); });
99 using Task = std::function<void()>;
100 std::vector<std::thread> pool;
101 std::queue<Task> tasks;
103 std::condition_variable cv_task;
104 std::atomic<bool> stoped;
105 std::atomic<int> idl_thr_num;
106 static Ptr instance_ptr;
107 static std::mutex instance_mutex;
void push(const T &value)
Definition: utility.h:37
Queue()
Definition: utility.h:36
void clear()
Definition: utility.h:49
std::shared_ptr< ThreadPool > Ptr
Definition: utility.h:73
std::atomic< bool > start
Definition: utility.h:66
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
void pop()
Definition: utility.h:42
std::shared_ptr< std::thread > m_thread
Definition: utility.h:65
std::atomic< bool > is_task_finished
Definition: utility.h:57
auto commit(F &&f, Args &&... args) -> std::future< decltype(f(args...))>
Definition: utility.h:82
apollo::cyber::base::std value
Thread()
Definition: utility.h:64
std::queue< T > m_quque
Definition: utility.h:56