libjmmcg
release_579_6_g8cffd
A C++ library containing an eclectic mix of useful, advanced components.
|
Parallel Pixie Dust or PPD is the name of the thread library within libjmmcg. More...
Namespaces | |
namespace | generic_traits |
namespace | lock |
namespace | no_locking |
namespace | NTUtils |
namespace | pool |
namespace | pool_traits |
A namespace to hold various traits relating to selecting the specific specialisation of thread_pool they would like. | |
namespace | private_ |
namespace | pthreads |
Classes | |
struct | api_lock_traits |
struct | api_lock_traits< generic_traits::api_type::no_api, sequential_mode > |
struct | api_lock_traits< generic_traits::api_type::posix_pthreads, heavyweight_threading > |
The various lock-types for POSIX-threads derived, platforms. More... | |
struct | api_lock_traits< generic_traits::MS_Win32, heavyweight_threading > |
struct | api_lock_traits< platform_api, sequential_mode > |
The various lock-types for sequential use, with no threading. More... | |
struct | api_threading_traits |
struct | api_threading_traits< generic_traits::api_type::no_api, sequential_mode > |
class | atomic_ctr_gen |
A general-purpose, atomic counter class, similar to the atomic integer types in C++11 ch 29. More... | |
class | atomic_ctr_gen< V, api_lock_traits< API, sequential_mode > > |
A specialisation for sequential operation to optimise performance. More... | |
class | atomic_ctr_opt |
An atomic counter class for integer types, similar to the atomic integer types in C++11 ch 29. More... | |
class | basic_statistics |
Some basic statistics collected about the operation of the wrapping thread_pool. More... | |
struct | cliques |
A modifier that enables dividing the thread_pool into a number of equal-sized cliques of pool_threads. More... | |
class | control_flow_graph |
A class to generate a Control Flow Graph (CFG), if the support has been coded into the joinable, nonjoinable, etc modifiers. More... | |
class | funky_queue |
An adaptor to add thread-safety assistance, specifically for queues. More... | |
struct | jthread |
Make sure the kernel-thread is always joined in the dtor. More... | |
struct | model_traits |
class | no_control_flow_graph |
A dummy class to not generate a Control Flow Graph (CFG), and hopefully and hopefully all calls will be optimised out, so there should be no cost. More... | |
class | no_signalling |
Atomically count the amount of work that there is to do, and provide access to the lock on the containing collection. More... | |
struct | no_statistics |
Just stub statistics - to support the interface. No actual statistics are collected. More... | |
class | noop_atomic_ctr_base |
An atomic counter class that actually does nothing, doesn't count at all. More... | |
struct | null_thread_worker_context |
A handy utility class for the "thread_wrapper" class, that is supposed to do nothing. More... | |
struct | numa_cpu_traits |
struct | pool_aspects |
The fundamental way to specify the type of thread_pool that is required. More... | |
class | priority_queue |
A thread-safety-assisted adaptor for a priority_queue. More... | |
class | queue |
An adaptor to add thread-safety assistance, specifically for queues. More... | |
class | safe_colln |
An adaptor for a container that attempts to add some thread-safety to assist in making thread-safe programs. More... | |
class | signalling |
A flag to atomically signal if the container contains work or not and also count the amount of work that there is to do. More... | |
class | thread |
This class is used to implement a class that wraps using a thread, it is an alternative to using a thread pool to manage your threads, in a C++ std::thread-style manner. More... | |
struct | thread_os_traits |
This class is used to encapsulate the OS-specific threading traits, mutexes, etc for the "thread_pool<...>" and other classes. More... | |
class | thread_params |
class | thread_params< generic_traits::api_type::posix_pthreads > |
Wrap up the PThreads details regarding creating a thread, so that it is normalised for the rest of the library. More... | |
class | thread_params< generic_traits::MS_Win32 > |
class | thread_pool |
class | thread_pool< pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::fixed_size, PTT > |
This pool has a limited, specified size, and uses a master to distribute the work to the worker threads. More... | |
class | thread_pool< pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::infinite, PTT > |
This pool has an unlimited size, and uses a master to distribute the work to the worker threads. More... | |
class | thread_pool< pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::sequential, P > |
This compatibility-pool has an unlimited size, and uses a master to execute the work. More... | |
class | thread_pool< pool_traits::work_distribution_mode_t::one_thread_distributes<>, 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 uses a master to distribute the work to the worker threads. More... | |
class | 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::fixed_size, PTT > |
This pool has a specified size, and the worker pool_threads steal work from a centrally-held signalled_work_queue. More... | |
class | 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::sequential, P > |
This compatibility-pool has an unlimited size, and the "worker thread"s directly execute the work. More... | |
class | 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. More... | |
class | thread_pool< pool_traits::work_distribution_mode_t::worker_threads_get_work< pool_traits::work_distribution_mode_t::queue_model_t::thread_owns_queue< pool_traits::work_distribution_mode_t::queue_model_t::stealing_mode_t::random > >, pool_traits::size_mode_t::fixed_size, PTT > |
This pool has a specified size, and the worker pool_threads steal each have a signalled_work_queue. More... | |
class | wrapper |
This class is used to implement a class that wraps using a thread, it is an alternative to using a thread pool to manage your threads. More... | |
Functions | |
template<generic_traits::api_type API> | |
tostream &__fastcall FORCE_INLINE | operator<< (tostream &os, thread_params< API > const &p) |
template<class V , class LkT > | |
tostream &FORCE_INLINE | operator<< (tostream &os, atomic_ctr< V, LkT > const &a) |
char const * | SIG_to_string (int signal_number) noexcept(true) |
std::ostream & | operator<< (std::ostream &os, siginfo_t const &si) noexcept(true) |
void | abort_handler (int signal_number, siginfo_t *info, void *) noexcept(true) |
void | dump_bt_to_cerr () |
Parallel Pixie Dust or PPD is the name of the thread library within libjmmcg.
Why is it called "ppd"? It stands for "Parallel Pixie Dust", a term coined at the ACCU by, if I recall correctly, Hubert Matthews in around 2001, whilst I was in conversation with him about thread libraries and their ability to shield a programmer from the issues of threading.
using jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::atomic_ctr = typedef typename std::conditional< std::is_integral<V>::value, atomic_ctr_opt<V, LkT>, typename std::conditional< std::is_pointer<V>::value, atomic_ctr_opt<V, LkT>, atomic_ctr_gen<V, LkT> >::type >::type |
A general-purpose, atomic-wrapper class, similar to the atomic types in C++11 ch 29, with some important differences.
Unlike std::atomic: #Works for any type: integer-types & pointers (to anything) are atomic, others use a mutex, so aren't: guaranteed. #Has a uniform interface. #Also note that this class reduces to a simple V-type, if it is single threaded, so costs nothing. #Note that this class is a valid value-type.
Definition at line 520 of file atomic_counter.hpp.
Definition at line 270 of file thread_params_traits.hpp.
E.g. x86 or SPARC.
Definition at line 275 of file thread_params_traits.hpp.
I.e. single-threaded, no locks.
Definition at line 265 of file thread_params_traits.hpp.
|
inlinenoexcept |
Definition at line 167 of file thread_api_traits_impl.hpp.
|
inline |
Definition at line 208 of file thread_api_traits_impl.hpp.
|
inlinenoexcept |
Definition at line 156 of file thread_api_traits_impl.hpp.
|
inline |
Definition at line 534 of file atomic_counter.hpp.
|
inline |
Definition at line 249 of file thread_params_traits.hpp.
|
inlinenoexcept |
Definition at line 125 of file thread_api_traits_impl.hpp.