7#ifndef BOTAN_THREAD_POOL_H_
8#define BOTAN_THREAD_POOL_H_
10#include <botan/types.h>
20#include <condition_variable>
66 void queue_thunk(
const std::function<
void ()>&);
68 template<
class F,
class... Args>
69 auto run(F&& f, Args&&... args) -> std::future<
typename std::invoke_result<F, Args...>::type>
71 using return_type =
typename std::invoke_result<F, Args...>::type;
73 auto future_work = std::bind(std::forward<F>(f), std::forward<Args>(args)...);
74 auto task = std::make_shared<std::packaged_task<return_type ()>>(future_work);
75 auto future_result = task->get_future();
76 queue_thunk([task]() { (*task)(); });
84 std::vector<std::thread> m_workers;
87 std::condition_variable m_more_tasks;
88 std::deque<std::function<void ()>> m_tasks;
Thread_Pool(Thread_Pool &&)=delete
size_t worker_count() const
Thread_Pool & operator=(Thread_Pool &&)=delete
Thread_Pool(size_t pool_size=0)
auto run(F &&f, Args &&... args) -> std::future< typename std::invoke_result< F, Args... >::type >
Thread_Pool & operator=(const Thread_Pool &)=delete
Thread_Pool(const Thread_Pool &)=delete
int(* final)(unsigned char *, CTX *)