7#include <condition_variable>
45 auto submit(F&& task) -> std::future<std::invoke_result_t<F>> {
46 using ReturnType = std::invoke_result_t<F>;
47 auto packaged = std::make_shared<std::packaged_task<ReturnType()>>(std::forward<F>(task));
48 std::future<ReturnType> result = packaged->get_future();
50 std::lock_guard<std::mutex> lock(mutex_);
52 throw std::runtime_error(
"DataThreadPool::submit: pool is stopped");
54 tasks_.emplace([packaged]() { (*packaged)(); });
61 std::vector<std::thread> workers_;
62 std::queue<std::function<void()>> tasks_;
64 std::condition_variable cv_;
Minimal, generic thread pool for CPU-side data pipeline work (fetch, decode, transform,...
Definition data_thread_pool.hpp:29
DataThreadPool(unsigned num_threads)
DataThreadPool & operator=(const DataThreadPool &)=delete
auto submit(F &&task) -> std::future< std::invoke_result_t< F > >
Enqueues a task for execution by a worker thread.
Definition data_thread_pool.hpp:45
DataThreadPool(const DataThreadPool &)=delete
Definition acquisition_functions.hpp:16