ITK
5.0.0
Insight Segmentation and Registration Toolkit
|
#include <itkThreadPool.h>
Thread pool maintains a constant number of threads.
Thread pool is called and initialized from within the PoolMultiThreader. Initially the thread pool is started with GlobalDefaultNumberOfThreads. The jobs are submitted via AddWork method.
This implementation heavily borrows from: https://github.com/progschj/ThreadPool
Definition at line 55 of file itkThreadPool.h.
Public Types | |
using | ConstPointer = SmartPointer< const Self > |
using | Pointer = SmartPointer< Self > |
using | Self = ThreadPool |
using | Superclass = Object |
Public Types inherited from itk::Object | |
using | ConstPointer = SmartPointer< const Self > |
using | Pointer = SmartPointer< Self > |
using | Self = Object |
using | Superclass = LightObject |
Public Types inherited from itk::LightObject | |
using | ConstPointer = SmartPointer< const Self > |
using | Pointer = SmartPointer< Self > |
using | Self = LightObject |
Public Member Functions | |
void | AddThreads (ThreadIdType count) |
m_WorkQueue | emplace_back ([task](){(*task)();}) |
ThreadIdType | GetMaximumNumberOfThreads () const |
virtual const char * | GetNameOfClass () const |
int | GetNumberOfCurrentlyIdleThreads () const |
m_Condition | notify_one () |
Public Member Functions inherited from itk::Object | |
unsigned long | AddObserver (const EventObject &event, Command *) |
unsigned long | AddObserver (const EventObject &event, Command *) const |
LightObject::Pointer | CreateAnother () const override |
virtual void | DebugOff () const |
virtual void | DebugOn () const |
Command * | GetCommand (unsigned long tag) |
bool | GetDebug () const |
MetaDataDictionary & | GetMetaDataDictionary () |
const MetaDataDictionary & | GetMetaDataDictionary () const |
virtual ModifiedTimeType | GetMTime () const |
virtual const TimeStamp & | GetTimeStamp () const |
bool | HasObserver (const EventObject &event) const |
void | InvokeEvent (const EventObject &) |
void | InvokeEvent (const EventObject &) const |
virtual void | Modified () const |
void | Register () const override |
void | RemoveAllObservers () |
void | RemoveObserver (unsigned long tag) |
void | SetDebug (bool debugFlag) const |
void | SetReferenceCount (int) override |
void | UnRegister () const noexceptoverride |
void | SetMetaDataDictionary (const MetaDataDictionary &rhs) |
void | SetMetaDataDictionary (MetaDataDictionary &&rrhs) |
virtual void | SetObjectName (std::string _arg) |
virtual const std::string & | GetObjectName () const |
Public Member Functions inherited from itk::LightObject | |
virtual void | Delete () |
virtual int | GetReferenceCount () const |
itkCloneMacro (Self) | |
void | Print (std::ostream &os, Indent indent=0) const |
Static Public Member Functions | |
static Pointer | GetInstance () |
static Pointer | New () |
static bool | GetDoNotWaitForThreads () |
static void | SetDoNotWaitForThreads (bool doNotWaitForThreads) |
Static Public Member Functions inherited from itk::Object | |
static bool | GetGlobalWarningDisplay () |
static void | GlobalWarningDisplayOff () |
static void | GlobalWarningDisplayOn () |
static Pointer | New () |
static void | SetGlobalWarningDisplay (bool flag) |
Static Public Member Functions inherited from itk::LightObject | |
static void | BreakOnError () |
static Pointer | New () |
Public Attributes | |
std::future< return_type > | res = task->get_future() |
return | res |
auto | task |
Protected Member Functions | |
std::mutex & | GetMutex () |
ThreadPool () | |
~ThreadPool () override | |
Protected Member Functions inherited from itk::Object | |
Object () | |
bool | PrintObservers (std::ostream &os, Indent indent) const |
void | PrintSelf (std::ostream &os, Indent indent) const override |
virtual void | SetTimeStamp (const TimeStamp &time) |
~Object () override | |
Protected Member Functions inherited from itk::LightObject | |
virtual LightObject::Pointer | InternalClone () const |
LightObject () | |
virtual void | PrintHeader (std::ostream &os, Indent indent) const |
virtual void | PrintTrailer (std::ostream &os, Indent indent) const |
virtual | ~LightObject () |
Private Member Functions | |
itkGetGlobalDeclarationMacro (ThreadPoolGlobals, PimplGlobals) | |
Static Private Member Functions | |
static void | ThreadExecute () |
Private Attributes | |
std::condition_variable | m_Condition |
bool | m_Stopping { false } |
std::vector< std::thread > | m_Threads |
std::deque< std::function < void() > > | m_WorkQueue |
Static Private Attributes | |
static ThreadPoolGlobals * | m_PimplGlobals |
Additional Inherited Members | |
Protected Attributes inherited from itk::LightObject | |
std::atomic< int > | m_ReferenceCount |
using itk::ThreadPool::ConstPointer = SmartPointer<const Self> |
Definition at line 64 of file itkThreadPool.h.
using itk::ThreadPool::Pointer = SmartPointer< Self > |
Definition at line 63 of file itkThreadPool.h.
using itk::ThreadPool::Self = ThreadPool |
Standard class type aliases.
Definition at line 61 of file itkThreadPool.h.
using itk::ThreadPool::Superclass = Object |
Definition at line 62 of file itkThreadPool.h.
|
protected |
|
overrideprotected |
void itk::ThreadPool::AddThreads | ( | ThreadIdType | count | ) |
Can call this method if we want to add extra threads to the pool.
m_WorkQueue itk::ThreadPool::emplace_back | ( | [task] (){(*task)();} | ) |
|
static |
Set/Get wait for threads. This function should be used carefully, probably only during static initialization phase to disable waiting for threads when ITK is built as a static library and linked into a shared library (Windows only).
|
static |
Returns the global singleton instance of the ThreadPool
|
inline |
Definition at line 104 of file itkThreadPool.h.
|
protected |
|
virtual |
Run-time type information (and related methods).
Reimplemented from itk::Object.
int itk::ThreadPool::GetNumberOfCurrentlyIdleThreads | ( | ) | const |
The approximate number of idle threads.
|
private |
Only used to synchronize the global variable across static libraries.
|
static |
Returns the global instance
m_Condition itk::ThreadPool::notify_one | ( | ) |
|
static |
Set/Get wait for threads. This function should be used carefully, probably only during static initialization phase to disable waiting for threads when ITK is built as a static library and linked into a shared library (Windows only).
|
staticprivate |
The continuously running thread function
|
private |
When a thread is idle, it is waiting on m_Condition. AddWork signals it to resume a (random) thread.
Definition at line 141 of file itkThreadPool.h.
|
staticprivate |
To lock on the internal variables
Definition at line 151 of file itkThreadPool.h.
|
private |
Definition at line 148 of file itkThreadPool.h.
|
private |
Vector to hold all thread handles. Thread handles are used to delete (join) the threads.
Definition at line 145 of file itkThreadPool.h.
|
private |
This is a list of jobs submitted to the thread pool. This is the only place where the jobs are submitted. Filled by AddWork, emptied by ThreadExecute.
Definition at line 137 of file itkThreadPool.h.
std::future< return_type > itk::ThreadPool::res = task->get_future() |
Definition at line 92 of file itkThreadPool.h.
return itk::ThreadPool::res |
Definition at line 98 of file itkThreadPool.h.
auto itk::ThreadPool::task |
Definition at line 89 of file itkThreadPool.h.