libjmmcg
build_2783
A C++ library containing an eclectic mix of useful, advanced components.
|
A class to assist in processing the core_work in the GSS(k) batch, ensuring that items within a batch in a thread are fully processed before any wait in that thread is performed, because we could deadlock. More...
#include <thread_client_context.hpp>
Public Types | |
typedef WQ | signalled_work_queue_type |
This is a container of GSSk items from the front of the queue to implement the GSS(k) or bakers' scheduling algorithm. More... | |
typedef Stats | statistics_type |
The statistics to be gathered by the thread_pool, by default none. More... | |
typedef signalled_work_queue_type::value_ret_type::value_type::no_ref_counting | no_ref_counting |
typedef signalled_work_queue_type::value_ret_type::value_type::value_type::cfg_type | cfg_type |
using | eval_shared_del_t = eval_shared_deleter_t< typename signalled_work_queue_type::value_ret_type::value_type > |
Public Member Functions | |
BOOST_STATIC_ASSERT (signalled_work_queue_type::max_size<=GSSk) | |
bool __fastcall | batch_empty () const noexcept(true) FORCE_INLINE |
constexpr __stdcall | batch_details () noexcept(true) FORCE_INLINE |
bool __fastcall | add_work_to_batch (typename signalled_work_queue_type::value_type &&wk) noexcept(true) FORCE_INLINE |
Put the closure_base-derived closure in the batch, if it is empty. More... | |
void __fastcall | refill_batch (signalled_work_queue_type &signalled_work_queue) noexcept(false) FORCE_INLINE |
bool __fastcall | process_a_batch_item () noexcept(false) FORCE_INLINE |
void __fastcall | process_a_batch (signalled_work_queue_type &signalled_work_queue) noexcept(false) FORCE_INLINE |
const statistics_type &__fastcall | statistics () const noexcept(true) FORCE_INLINE |
statistics_type &__fastcall | statistics () noexcept(true) FORCE_INLINE |
Static Public Attributes | |
static constexpr unsigned long | GSSk =GSSkSz |
static constexpr ppd::generic_traits::memory_access_modes | memory_access_mode =eval_shared_del_t::memory_access_mode |
Protected Member Functions | |
void __fastcall | reload_batch_if_empty_nochk_nolk (signalled_work_queue_type &signalled_work_queue) noexcept(false) FORCE_INLINE |
template<class UpdStats > | |
void FORCE_INLINE | process_the_work (UpdStats &&update_stats, typename cfg_type::edge_annotation_t const e_details) noexcept(false) |
Protected Attributes | |
statistics_type | statistics_ |
signalled_work_queue_type::value_ret_type | batched_work |
signalled_work_queue_type::value_ret_type::iterator | current_work_item |
A class to assist in processing the core_work in the GSS(k) batch, ensuring that items within a batch in a thread are fully processed before any wait in that thread is performed, because we could deadlock.
Note that this class is used for the implicit batch contained formed by the main thread in the program that creates the thread_pool.
Definition at line 147 of file thread_client_context.hpp.
typedef signalled_work_queue_type::value_ret_type::value_type::value_type::cfg_type jmmcg::ppd::private_::batch_details< GSSkSz, WQ, Stats >::cfg_type |
Definition at line 154 of file thread_client_context.hpp.
using jmmcg::ppd::private_::batch_details< GSSkSz, WQ, Stats >::eval_shared_del_t = eval_shared_deleter_t<typename signalled_work_queue_type::value_ret_type::value_type> |
Definition at line 155 of file thread_client_context.hpp.
typedef signalled_work_queue_type::value_ret_type::value_type::no_ref_counting jmmcg::ppd::private_::batch_details< GSSkSz, WQ, Stats >::no_ref_counting |
Definition at line 153 of file thread_client_context.hpp.
typedef WQ jmmcg::ppd::private_::batch_details< GSSkSz, WQ, Stats >::signalled_work_queue_type |
This is a container of GSSk items from the front of the queue to implement the GSS(k) or bakers' scheduling algorithm.
Definition at line 150 of file thread_client_context.hpp.
typedef Stats jmmcg::ppd::private_::batch_details< GSSkSz, WQ, Stats >::statistics_type |
The statistics to be gathered by the thread_pool, by default none.
Definition at line 152 of file thread_client_context.hpp.
|
inlineconstexprnoexcept |
Definition at line 195 of file thread_client_context.hpp.
|
inlinenoexcept |
Put the closure_base-derived closure in the batch, if it is empty.
Note that this function runs with no locks, as it presumes that the caller is the same pool_thread that consumes the work from the batch.
wk | The closure_base-derived closure to attempt to add. |
Definition at line 208 of file thread_client_context.hpp.
|
inlinenoexcept |
Definition at line 174 of file thread_client_context.hpp.
jmmcg::ppd::private_::batch_details< GSSkSz, WQ, Stats >::BOOST_STATIC_ASSERT | ( | signalled_work_queue_type::max_size<= | GSSk | ) |
Make sure that the batch_size's are the same, so that when a batch is popped off the signalled_work_queue, all of the elements are copied, with none being lost, which would cause closure_base-derived closure not to be processed.
|
inlinenoexcept |
If the batch_size>1 and the first closure_base-derived closure depends upon a later job to complete, then that sub-tree of dependent closure_base-derived closures will deadlock. This is because this loop will wait for the first closure_base-derived closure to complete, which depends upon the second (or later in the batch) closure_base-derived closure which will not be executed as the earlier closure_base-derived closure is preventing this loop for continuing.
Definition at line 244 of file thread_client_context.hpp.
|
inlinenoexcept |
Definition at line 233 of file thread_client_context.hpp.
|
inlineprotectednoexcept |
Definition at line 188 of file thread_client_context.hpp.
|
inlinenoexcept |
Definition at line 220 of file thread_client_context.hpp.
|
inlineprotectednoexcept |
Definition at line 179 of file thread_client_context.hpp.
Referenced by jmmcg::ppd::private_::batch_details< pool_traits_type::GSSk, signalled_work_queue_type, typename remove_shared_ptr< typename pool_type::value_type, api_lock_traits< platform_api, sequential_mode > >::value_type::statistics_type >::add_work_to_batch(), jmmcg::ppd::private_::batch_details< pool_traits_type::GSSk, signalled_work_queue_type, typename remove_shared_ptr< typename pool_type::value_type, api_lock_traits< platform_api, sequential_mode > >::value_type::statistics_type >::process_a_batch(), jmmcg::ppd::private_::setter< TT, new_priority >::setter(), jmmcg::ppd::private_::batch_details< pool_traits_type::GSSk, signalled_work_queue_type, typename remove_shared_ptr< typename pool_type::value_type, api_lock_traits< platform_api, sequential_mode > >::value_type::statistics_type >::statistics(), and jmmcg::ppd::private_::setter< TT, new_priority >::~setter().
|
inlinenoexcept |
Definition at line 251 of file thread_client_context.hpp.
|
inlinenoexcept |
Definition at line 254 of file thread_client_context.hpp.
|
protected |
Definition at line 260 of file thread_client_context.hpp.
|
protected |
Definition at line 261 of file thread_client_context.hpp.
|
staticconstexpr |
Definition at line 157 of file thread_client_context.hpp.
|
staticconstexpr |
To assist in allowing compile-time computation of the algorithmic order of the threading model.
Definition at line 162 of file thread_client_context.hpp.
|
protected |
Definition at line 259 of file thread_client_context.hpp.