ITK  4.8.0
Insight Segmentation and Registration Toolkit
Classes | Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
itk::ThreadPool Class Reference

#include <itkThreadPool.h>

+ Inheritance diagram for itk::ThreadPool:
+ Collaboration diagram for itk::ThreadPool:

Detailed Description

Thread pool manages the threads for itk.

Thread pool is called and initialized from within the MultiThreader. Initially the thread pool is started with zero threads. Threads are added as job(s) are submitted to the thread pool and if it cannot be executed right away. For example : If the thread pool has three threads and all are busy. If a new job is submitted to the thread pool, the thread pool checks to see if any threads are free. If not, it adds a new thread and executed the job right away. The ThreadJob class is used to submit jobs to the thread pool. The ThreadJob's necessary members need to be set and then the ThreadJob can be passed to the ThreaadPool by calling its AssignWork Method which returns the thread id on which the job is being executed. One can then wait for the job using the thread id and calling the WaitForJob method on the thread pool.

Definition at line 72 of file itkThreadPool.h.


class  ThreadProcessIdentifiers
class  ThreadSemaphorePair

Public Types

typedef SmartPointer< const SelfConstPointer
typedef SmartPointer< SelfPointer
typedef ThreadPool Self
typedef Object Superclass
typedef unsigned int ThreadCountType
typedef ThreadJob::JobIdType ThreadJobIdType
typedef int ThreadTimeType
- Public Types inherited from itk::Object
typedef SmartPointer< const SelfConstPointer
typedef SmartPointer< SelfPointer
typedef Object Self
typedef LightObject Superclass
- Public Types inherited from itk::LightObject
typedef SmartPointer< const SelfConstPointer
typedef SmartPointer< SelfPointer
typedef LightObject Self

Public Member Functions

ThreadProcessIdType AssignWork (ThreadJob worker)
virtual const char * GetNameOfClass () const
void InitializeThreads (ThreadCountType maxThreads)
bool WaitForJobOnThreadHandle (ThreadProcessIdType handle)
- Public Member Functions inherited from itk::Object
unsigned long AddObserver (const EventObject &event, Command *)
unsigned long AddObserver (const EventObject &event, Command *) const
virtual LightObject::Pointer CreateAnother () const override
virtual void DebugOff () const
virtual void DebugOn () const
CommandGetCommand (unsigned long tag)
bool GetDebug () const
MetaDataDictionaryGetMetaDataDictionary ()
const MetaDataDictionaryGetMetaDataDictionary () const
virtual ModifiedTimeType GetMTime () const
virtual const TimeStampGetTimeStamp () const
bool HasObserver (const EventObject &event) const
void InvokeEvent (const EventObject &)
void InvokeEvent (const EventObject &) const
virtual void Modified () const
virtual void Register () const override
void RemoveAllObservers ()
void RemoveObserver (unsigned long tag)
void SetDebug (bool debugFlag) const
void SetMetaDataDictionary (const MetaDataDictionary &rhs)
virtual void SetReferenceCount (int) override
virtual void UnRegister () const noexceptoverride
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 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 ()

Protected Member Functions

 ThreadPool ()
virtual ~ThreadPool ()
- Protected Member Functions inherited from itk::Object
 Object ()
bool PrintObservers (std::ostream &os, Indent indent) const
virtual void PrintSelf (std::ostream &os, Indent indent) const override
virtual void SetTimeStamp (const TimeStamp &time)
virtual ~Object ()
- 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 Types

enum  {
typedef std::pair
< ThreadJobIdType, ThreadJob
typedef std::map
< ThreadJobIdType, ThreadJob
typedef std::set< ThreadJobIdTypeThreadJobIdsContainerType
typedef std::set
< ThreadProcessIdType

Private Member Functions

ThreadPooloperator= (ThreadPool const &)
 ThreadPool (ThreadPool const &)

Private Attributes

bool m_ExceptionOccurred
unsigned int m_IdCounter
bool m_ScheduleForDestruction
ThreadCountType m_ThreadCount
ThreadProcessIdContainerType m_ThreadHandles
ThreadJobContainerType m_WorkerQueue

Static Private Attributes

static SimpleFastMutexLock m_NumberOfPendingJobsToBeRunMutex
static SimpleFastMutexLock m_WorkerQueueMutex
typedef std::vector
< ThreadProcessIdentifiers
typedef std::vector
< ThreadSemaphorePair * > 
ThreadProcessIdentifiersVecType m_ThreadProcessIdentifiersVector
ThreadSemHandlePairingQueueType m_ThreadSemHandlePairingQueue
ThreadSemHandlePairingQueueType m_ThreadSemHandlePairingForWaitQueue
static SimpleFastMutexLock m_ThreadProcessIdentifiersVectorMutex
static Pointer m_ThreadPoolInstance
static SimpleFastMutexLock m_ThreadPoolInstanceMutex
const ThreadJobFetchWork (ThreadProcessIdType t)
void RemoveActiveId (ThreadJobIdType id)
void AddThread ()
ThreadProcessIdentifiersFindThreadToRun ()
ThreadSemaphorePairGetSemaphore (ThreadSemHandlePairingQueueType &q, ThreadProcessIdType threadHandle)
ThreadSemaphorePairGetSemaphoreForThread (ThreadProcessIdType threadHandle)
ThreadSemaphorePairGetSemaphoreForThreadWait (ThreadProcessIdType threadHandle)
void DeallocateThreadSemSet (ThreadSemHandlePairingQueueType &q)
ThreadProcessIdType GetThreadHandleForThreadId (ThreadIdType id)
static void * ThreadExecute (void *param)
static bool CompareThreadHandles (ThreadProcessIdType t1, ThreadProcessIdType t2)

Additional Inherited Members

- Protected Attributes inherited from itk::LightObject
AtomicInt< int > m_ReferenceCount

Member Typedef Documentation

Definition at line 80 of file itkThreadPool.h.

Definition at line 79 of file itkThreadPool.h.

Standard class typedefs.

Definition at line 77 of file itkThreadPool.h.

Definition at line 78 of file itkThreadPool.h.

typedef unsigned int itk::ThreadPool::ThreadCountType

Definition at line 84 of file itkThreadPool.h.

Definition at line 157 of file itkThreadPool.h.

Definition at line 155 of file itkThreadPool.h.

Definition at line 159 of file itkThreadPool.h.

Definition at line 85 of file itkThreadPool.h.

Definition at line 161 of file itkThreadPool.h.

To lock on the vectors

Definition at line 226 of file itkThreadPool.h.

To lock on the vectors

Definition at line 230 of file itkThreadPool.h.

local class typedefs.

Definition at line 83 of file itkThreadPool.h.

Member Enumeration Documentation

anonymous enum

Vector of pairs that hold job ids and their corresponding thread handles


Definition at line 178 of file itkThreadPool.h.

Constructor & Destructor Documentation

itk::ThreadPool::ThreadPool ( )
virtual itk::ThreadPool::~ThreadPool ( )
itk::ThreadPool::ThreadPool ( ThreadPool const &  )

Member Function Documentation

void itk::ThreadPool::AddThread ( )

Called to add a thread to the thread pool. This method add a thread to the thread pool and pushes the thread handle into the m_ThreadHandles set

ThreadProcessIdType itk::ThreadPool::AssignWork ( ThreadJob  worker)

This method is called to assign a job to the thread pool

static bool itk::ThreadPool::CompareThreadHandles ( ThreadProcessIdType  t1,
ThreadProcessIdType  t2 

Method to compare thread handles - true for same false for different

void itk::ThreadPool::DeallocateThreadSemSet ( ThreadSemHandlePairingQueueType q)

To lock on the vectors

const ThreadJob& itk::ThreadPool::FetchWork ( ThreadProcessIdType  t)

This function is called by the threads to get jobs to be executed. This method is the "first" call from the threads in the thread pool. Now this method blocks the thread until a job is available for the thread to execute. Once a job is available(known from m_ThreadProcessIdentifiersVector), it gets it from the worker queue and returns it

ThreadProcessIdentifiers* itk::ThreadPool::FindThreadToRun ( )

To check if the thread pool has to add a thread. This method checks if any threads in the thread pool are free. If so, it returns false else returns true

static Pointer itk::ThreadPool::GetInstance ( )

Returns the global singleton instance of the ThreadPool

This method is a Singleton and does not have a New method.

virtual const char* itk::ThreadPool::GetNameOfClass ( ) const

Run-time type information (and related methods).

Reimplemented from itk::Object.

ThreadSemaphorePair* itk::ThreadPool::GetSemaphore ( ThreadSemHandlePairingQueueType q,
ThreadProcessIdType  threadHandle 

To lock on the vectors

ThreadSemaphorePair* itk::ThreadPool::GetSemaphoreForThread ( ThreadProcessIdType  threadHandle)

To lock on the vectors

ThreadSemaphorePair* itk::ThreadPool::GetSemaphoreForThreadWait ( ThreadProcessIdType  threadHandle)

To lock on the vectors

ThreadProcessIdType itk::ThreadPool::GetThreadHandleForThreadId ( ThreadIdType  id)

Used under windows - gets the thread handle associated with thread id

void itk::ThreadPool::InitializeThreads ( ThreadCountType  maxThreads)

Can call this method if we want to pre-start maxThreads in the thread pool

static Pointer itk::ThreadPool::New ( )

Returns the global instance of the ThreadPool

ThreadPool& itk::ThreadPool::operator= ( ThreadPool const &  )
void itk::ThreadPool::RemoveActiveId ( ThreadJobIdType  id)

Used to remove an active job id from the queue because it is done. This method is called by the threads once they are done with the job. This method removes the job id from m_ActiveJobIds, marks the thread as free by setting appropriate values in the m_ThreadProcessIdentifiersVector vector and removes the job from m_WorkerQueue

static void* itk::ThreadPool::ThreadExecute ( void *  param)

thread function

bool itk::ThreadPool::WaitForJobOnThreadHandle ( ThreadProcessIdType  handle)

This method blocks until the given (job) id has finished executing

Member Data Documentation

bool itk::ThreadPool::m_ExceptionOccurred

set if exception occurs

Definition at line 153 of file itkThreadPool.h.

unsigned int itk::ThreadPool::m_IdCounter

counter to assign job ids

Definition at line 150 of file itkThreadPool.h.

SimpleFastMutexLock itk::ThreadPool::m_NumberOfPendingJobsToBeRunMutex

To lock on m_NumberOfPendingJobsToBeRun

Definition at line 147 of file itkThreadPool.h.

bool itk::ThreadPool::m_ScheduleForDestruction

Set when the thread pool is to be stopped

Definition at line 141 of file itkThreadPool.h.

ThreadCountType itk::ThreadPool::m_ThreadCount

Maintains count of threads

Definition at line 144 of file itkThreadPool.h.

ThreadProcessIdContainerType itk::ThreadPool::m_ThreadHandles

Vector to hold all active thread handles

Definition at line 174 of file itkThreadPool.h.

Pointer itk::ThreadPool::m_ThreadPoolInstance

To lock on the vectors

Definition at line 262 of file itkThreadPool.h.

SimpleFastMutexLock itk::ThreadPool::m_ThreadPoolInstanceMutex

To lock on m_ThreadPoolInstance

Definition at line 264 of file itkThreadPool.h.

ThreadProcessIdentifiersVecType itk::ThreadPool::m_ThreadProcessIdentifiersVector

To lock on the vectors

Definition at line 227 of file itkThreadPool.h.

SimpleFastMutexLock itk::ThreadPool::m_ThreadProcessIdentifiersVectorMutex

To lock on the vectors

Definition at line 236 of file itkThreadPool.h.

ThreadSemHandlePairingQueueType itk::ThreadPool::m_ThreadSemHandlePairingForWaitQueue

To lock on the vectors

Definition at line 233 of file itkThreadPool.h.

ThreadSemHandlePairingQueueType itk::ThreadPool::m_ThreadSemHandlePairingQueue

To lock on the vectors

Definition at line 232 of file itkThreadPool.h.

ThreadJobContainerType itk::ThreadPool::m_WorkerQueue

this is a list of jobs(ThreadJob) submitted to the thread pool this is the only place where the jobs are submitted. We need a worker queue because the thread pool assigns work to a thread which is free. So when a job is submitted, it has to be stored somewhere

Definition at line 168 of file itkThreadPool.h.

SimpleFastMutexLock itk::ThreadPool::m_WorkerQueueMutex

To lock on m_WorkerQueue

Definition at line 171 of file itkThreadPool.h.

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