1 #ifndef OSMIUM_THREAD_POOL_HPP
2 #define OSMIUM_THREAD_POOL_HPP
42 #include <type_traits>
77 for (
auto& thread : m_threads) {
78 if (thread.joinable()) {
118 explicit Pool(
int num_threads,
size_t max_queue_size) :
119 m_work_queue(max_queue_size,
"work"),
122 m_num_threads(num_threads) {
124 if (m_num_threads == 0) {
128 if (m_num_threads <= 0) {
129 m_num_threads = std::max(1, static_cast<int>(std::thread::hardware_concurrency()) + m_num_threads);
148 static Pool pool(default_num_threads, max_work_queue_size);
165 return m_work_queue.
size();
169 return m_work_queue.
empty();
172 template <
typename TFunction>
177 std::packaged_task<result_type()> task(std::forward<TFunction>(func));
178 std::future<result_type> future_result(task.get_future());
179 m_work_queue.
push(std::move(task));
181 return future_result;
190 #endif // OSMIUM_THREAD_POOL_HPP
Pool(int num_threads, size_t max_queue_size)
Definition: pool.hpp:118
type
Definition: entity_bits.hpp:60
size_t size() const
Definition: queue.hpp:188
bool empty() const
Definition: queue.hpp:183
void set_thread_name(const char *name) noexcept
Definition: util.hpp:74
~Pool()
Definition: pool.hpp:159
static constexpr size_t max_work_queue_size
Definition: pool.hpp:145
std::vector< std::thread > & m_threads
Definition: pool.hpp:68
void shutdown()
Definition: queue.hpp:144
std::future< typename std::result_of< TFunction()>::type > submit(TFunction &&func)
Definition: pool.hpp:173
static constexpr int default_num_threads
Definition: pool.hpp:144
void worker_thread()
Definition: pool.hpp:91
static Pool & instance()
Definition: pool.hpp:147
Namespace for everything in the Osmium library.
Definition: assembler.hpp:59
void wait_and_pop_with_timeout(T &value)
Definition: queue.hpp:160
int get_pool_threads()
Definition: config.hpp:47
Definition: function_wrapper.hpp:48
std::vector< std::thread > m_threads
Definition: pool.hpp:87
osmium::thread::Queue< function_wrapper > m_work_queue
Definition: pool.hpp:86
thread_joiner(std::vector< std::thread > &threads)
Definition: pool.hpp:72
int m_num_threads
Definition: pool.hpp:89
~thread_joiner()
Definition: pool.hpp:76
void push(T value)
Definition: queue.hpp:122
void shutdown_all_workers()
Definition: pool.hpp:152
bool queue_empty() const
Definition: pool.hpp:168
thread_joiner m_joiner
Definition: pool.hpp:88
size_t queue_size() const
Definition: pool.hpp:164