#include <thread_pool.h>
Definition at line 25 of file thread_pool.h.
◆ Thread_Pool() [1/4]
| Botan::Thread_Pool::Thread_Pool |
( |
std::optional< size_t > | pool_size | ) |
|
|
explicit |
Initialize a thread pool with some number of threads
- Parameters
-
| pool_size | number of threads in the pool, if 0 then some default value is chosen. If the optional is nullopt then the thread pool is disabled; all work is executed immediately when queued. |
Definition at line 62 of file thread_pool.cpp.
62 : m_shutdown(false) {
63
64 const std::string tname = "Botan thread";
65
66 if(!opt_pool_size.has_value()) {
67 return;
68 }
69
70 size_t pool_size = opt_pool_size.value();
71
72 if(pool_size == 0) {
73
74
75
76
78 pool_size = std::clamp<size_t>(cores, 2, 16);
79 }
80
81 m_workers.resize(pool_size);
82
83 for(size_t i = 0; i != pool_size; ++i) {
84 m_workers[i] = std::thread(&Thread_Pool::worker_thread, this);
85 OS::set_thread_name(m_workers[i], tname);
86 }
87}
size_t BOTAN_TEST_API get_cpu_available()
Referenced by global_instance(), operator=(), operator=(), Thread_Pool(), Thread_Pool(), and Thread_Pool().
◆ Thread_Pool() [2/4]
| Botan::Thread_Pool::Thread_Pool |
( |
size_t | pool_size = 0 | ) |
|
|
inlineexplicit |
Initialize a thread pool with some number of threads
- Parameters
-
| pool_size | number of threads in the pool, if 0 then some default value is chosen. |
Definition at line 46 of file thread_pool.h.
Thread_Pool(std::optional< size_t > pool_size)
References Thread_Pool().
◆ ~Thread_Pool()
| Botan::Thread_Pool::~Thread_Pool |
( |
| ) |
|
|
inline |
◆ Thread_Pool() [3/4]
| Botan::Thread_Pool::Thread_Pool |
( |
const Thread_Pool & | | ) |
|
|
delete |
◆ Thread_Pool() [4/4]
| Botan::Thread_Pool::Thread_Pool |
( |
Thread_Pool && | | ) |
|
|
delete |
◆ global_instance()
Return an instance to a shared thread pool
Definition at line 57 of file thread_pool.cpp.
57 {
58 static Thread_Pool g_thread_pool(global_thread_pool_size());
59 return g_thread_pool;
60}
References Thread_Pool().
◆ operator=() [1/2]
◆ operator=() [2/2]
◆ queue_thunk()
| void Botan::Thread_Pool::queue_thunk |
( |
const std::function< void()> & | work | ) |
|
Definition at line 108 of file thread_pool.cpp.
108 {
109 std::unique_lock<std::mutex>
lock(m_mutex);
110
111 if(m_shutdown) {
112 throw Invalid_State("Cannot add work after thread pool has shut down");
113 }
114
115 if(m_workers.empty()) {
117 return work();
118 }
119
120 m_tasks.push_back(work);
121 m_more_tasks.notify_one();
122}
secure_vector< T > lock(const std::vector< T > &in)
References Botan::lock().
Referenced by operator=(), and run().
◆ run()
template<class F, class... Args>
| auto Botan::Thread_Pool::run |
( |
F && | f, |
|
|
Args &&... | args ) -> std::future< std::invoke_result_t< F, Args... > > |
|
inline |
Definition at line 66 of file thread_pool.h.
66 {
67 using return_type = std::invoke_result_t<F, Args...>;
68
69 auto future_work = std::bind(std::forward<F>(f), std::forward<Args>(args)...);
70 auto task = std::make_shared<std::packaged_task<return_type()>>(future_work);
71 auto future_result = task->get_future();
73 return future_result;
74 }
void queue_thunk(const std::function< void()> &work)
References queue_thunk().
◆ shutdown()
| void Botan::Thread_Pool::shutdown |
( |
| ) |
|
Definition at line 89 of file thread_pool.cpp.
89 {
90 {
91 const std::unique_lock<std::mutex>
lock(m_mutex);
92
93 if(m_shutdown) {
94 return;
95 }
96
97 m_shutdown = true;
98
99 m_more_tasks.notify_all();
100 }
101
102 for(auto&& thread : m_workers) {
103 thread.join();
104 }
105 m_workers.clear();
106}
References Botan::lock().
Referenced by ~Thread_Pool().
◆ worker_count()
| size_t Botan::Thread_Pool::worker_count |
( |
| ) |
const |
|
inline |
Definition at line 52 of file thread_pool.h.
52{ return m_workers.size(); }
The documentation for this class was generated from the following files: