libjmmcg  build_2783
A C++ library containing an eclectic mix of useful, advanced components.
jmmcg::ppd::thread_pool< pool_traits::work_distribution_mode_t::worker_threads_get_work< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue >, pool_traits::size_mode_t::tracks_to_max, PTT > Class Template Reference

This pool has a maximum specified size to which it will grow and reduce from, and the worker pool_threads steal work from a centrally-held signalled_work_queue. More...

#include <thread_pool_workers.hpp>

Inheritance diagram for jmmcg::ppd::thread_pool< pool_traits::work_distribution_mode_t::worker_threads_get_work< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue >, pool_traits::size_mode_t::tracks_to_max, PTT >:
[legend]
Collaboration diagram for jmmcg::ppd::thread_pool< pool_traits::work_distribution_mode_t::worker_threads_get_work< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue >, pool_traits::size_mode_t::tracks_to_max, PTT >:
[legend]

Public Types

enum  erase_states { erase_states::failed_to_erase, erase_states::ignoring_result, erase_states::erased_successfully }
 
using base_t = private_::thread_pool_queue_model< pool_traits::work_distribution_mode_t::worker_threads_get_work< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue >, pool_traits::size_mode_t::tracks_to_max, PTT, private_::fixed_pool_of_threads< PTT, pool::private_::thread_types::steal< PTT::result_traits_, typename PTT::os_traits, PTT, pool_traits::work_distribution_mode_t::worker_threads_get_work< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue >::queue_model > > >
 
using pool_traits_type = typename base_t::pool_traits_type
 
using os_traits = typename base_t::os_traits
 
using thread_traits = typename base_t::thread_traits
 
using api_params_type = typename base_t::api_params_type
 
using pool_type = typename base_t::pool_type
 
using GSSk_batching_type = typename base_t::GSSk_batching_type
 
using statistics_type = typename base_t::statistics_type
 
using work_distribution_mode = typename base_t::work_distribution_mode
 
using signalled_work_queue_type = typename base_t::signalled_work_queue_type
 

Public Member Functions

 BOOST_MPL_ASSERT ((std::is_same< typename std::is_same< typename PTT::os_traits::thread_traits::model_type, sequential_mode >::type, std::false_type >))
 
 thread_pool (thread_pool const &)=delete
 Create the thread pool. More...
 
__stdcall ~thread_pool () noexcept(false) FORCE_INLINE
 
template<typename ExecT_ >
erase_states __fastcall FORCE_INLINE erase (ExecT_ &ec)
 Erase the specified, queued work. More...
 
const statistics_type __fastcall statistics () const noexcept(true) FORCE_INLINE
 Obtain access to any statistics data collected by the operation of the thread_pool. More...
 

Detailed Description

template<class PTT>
class jmmcg::ppd::thread_pool< pool_traits::work_distribution_mode_t::worker_threads_get_work< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue >, pool_traits::size_mode_t::tracks_to_max, PTT >

This pool has a maximum specified size to which it will grow and reduce from, and the worker pool_threads steal work from a centrally-held signalled_work_queue.

The internal signalled_work_queue is reasonably efficiently implemented: if there is enough work in the signalled_work_queue, the addition of the input_work to it can occur independently of the removal of the input_work by the worker pool_threads.

Definition at line 308 of file thread_pool_workers.hpp.

Member Typedef Documentation

◆ api_params_type

◆ base_t

◆ GSSk_batching_type

◆ os_traits

◆ pool_traits_type

◆ pool_type

◆ signalled_work_queue_type

◆ statistics_type

◆ thread_traits

◆ work_distribution_mode

Member Enumeration Documentation

◆ erase_states

Constructor & Destructor Documentation

◆ thread_pool()

◆ ~thread_pool()

The destruction of the collection of threads is sequential, but the threads themselves can exit in parallel, thus speeding up the clean-up of the pool.

Definition at line 388 of file thread_pool_workers.hpp.

References jmmcg::ppd::control_flow_graph< OST >::add_cfg_details< Node >::params::params().

Member Function Documentation

◆ BOOST_MPL_ASSERT()

template<class PTT >
jmmcg::ppd::thread_pool< pool_traits::work_distribution_mode_t::worker_threads_get_work< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue >, pool_traits::size_mode_t::tracks_to_max, PTT >::BOOST_MPL_ASSERT ( (std::is_same< typename std::is_same< typename PTT::os_traits::thread_traits::model_type, sequential_mode >::type, std::false_type >)  )

◆ erase()

Erase the specified, queued work.

Note that if the work has started processing, it will not be erased.

Parameters
ecThe execution context of the work to erase.
Returns
The outcome of the erase request, which may be successful, or failed because the work may be being processed.
See also
erase_states

Definition at line 406 of file thread_pool_workers.hpp.

◆ statistics()

Obtain access to any statistics data collected by the operation of the thread_pool.

Algorithmic complexity: O(pool_size()) Note that the value computed for the statistics_type::total_vertical_work() is guaranteed to be accurate. The value computed for the statistics_type::total_hrz_work() is guaranteed not be more than the value as if it were computed atomically. Therefore the following holds: statistics_type::total_work_added()>=statistics_type::total_vertical_work()+statistics_type::total_hrz_work()

Definition at line 421 of file thread_pool_workers.hpp.

References jmmcg::ppd::control_flow_graph< OST >::add_cfg_details< Node >::params::params().


The documentation for this class was generated from the following file: