| The Gaudi Framework v29r0 (ff2e7097)

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- Class List
- Class Index
- Class Hierarchy
- Class Members

Public Member Functions | Private Member Functions | Private Attributes | List of all members
ThreadPoolSvc Class Reference

A service which initializes a TBB thread pool. More...

`#include <src/ThreadPoolSvc.h>`

Inheritance diagram for ThreadPoolSvc:
[legend]
Collaboration diagram for ThreadPoolSvc:
[legend]

## Public Member Functions
| ThreadPoolSvc (const std::string &name, ISvcLocator *svc)
| Constructor. More...
virtual StatusCode | initialize () override final
| Initialise. More...
virtual StatusCode | finalize () override final
| Finalise. More...
virtual StatusCode | initPool (const int &poolSize) override final
| Initialize the thread pool and launch the ThreadInitTasks. More...
virtual StatusCode | terminatePool () override final
| Terminate the thread pool and launch thread termination tasks. More...
virtual int | poolSize () const override final
virtual bool | isInit () const
Public Member Functions inherited from extends< Service, IThreadPoolSvc >
void * | i_cast (const InterfaceID &tid) const override
| Implementation of IInterface::i_cast. More...
StatusCode | queryInterface (const InterfaceID &ti, void **pp) override
| Implementation of IInterface::queryInterface. More...
std::vector< std::string > | getInterfaceNames () const override
| Implementation of IInterface::getInterfaceNames. More...
| ~extends () override=default
| Virtual destructor. More...
Public Member Functions inherited from Service
const std::string & | name () const override
| Retrieve name of the service. More...
StatusCode | configure () override
StatusCode | initialize () override
StatusCode | start () override
StatusCode | stop () override
StatusCode | finalize () override
StatusCode | terminate () override
Gaudi::StateMachine::State | FSMState () const override
Gaudi::StateMachine::State | targetFSMState () const override
StatusCode | reinitialize () override
StatusCode | restart () override
StatusCode | sysInitialize () override
| Initialize Service. More...
StatusCode | sysStart () override
| Initialize Service. More...
StatusCode | sysStop () override
| Initialize Service. More...
StatusCode | sysFinalize () override
| Finalize Service. More...
StatusCode | sysReinitialize () override
| Re-initialize the Service. More...
StatusCode | sysRestart () override
| Re-initialize the Service. More...
| Service (std::string name, ISvcLocator *svcloc)
| Standard Constructor. More...
SmartIF< ISvcLocator > & | serviceLocator () const override
| Retrieve pointer to service locator. More...
StatusCode | setProperties ()
| Method for setting declared properties to the values specified for the job. More...
template<class T >
StatusCode | service (const std::string &name, const T *&psvc, bool createIf=true) const
| Access a service by name, creating it if it doesn't already exist. More...
template<class T >
StatusCode | service (const std::string &name, T *&psvc, bool createIf=true) const
template<typename IFace = IService>
SmartIF< IFace > | service (const std::string &name, bool createIf=true) const
template<class T >
StatusCode | service (const std::string &svcType, const std::string &svcName, T *&psvc) const
| Access a service by name and type, creating it if it doesn't already exist. More...
template<class T >
StatusCode | declareTool (ToolHandle< T > &handle, std::string toolTypeAndName, bool createIf=true)
| Declare used tool. More...
SmartIF< IAuditorSvc > & | auditorSvc () const
| The standard auditor service.May not be invoked before sysInitialize() has been invoked. More...
Public Member Functions inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
| PropertyHolder ()=default
| ~PropertyHolder () override=default
Gaudi::Details::PropertyBase & | declareProperty (Gaudi::Details::PropertyBase &prop)
| Declare a property. More...
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, TYPE &value, const std::string &doc="none")
| Helper to wrap a regular data member and use it as a regular property. More...
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, TYPE &value, const std::string &doc="none") const
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, Gaudi::Property< TYPE, VERIFIER, HANDLERS > &prop, const std::string &doc="none")
| Declare a PropertyBase instance setting name and documentation. More...
Gaudi::Details::PropertyBase * | declareRemoteProperty (const std::string &name, IProperty *rsvc, const std::string &rname="")
| Declare a remote property. More...
StatusCode | setProperty (const Gaudi::Details::PropertyBase &p) override
| set the property form another property More...
StatusCode | setProperty (const std::string &s) override
| set the property from the formatted string More...
StatusCode | setProperty (const std::string &n, const std::string &v) override
| set the property from name and the value More...
StatusCode | setProperty (const std::string &name, const TYPE &value)
| set the property form the value More...
StatusCode | getProperty (Gaudi::Details::PropertyBase *p) const override
| get the property More...
const Gaudi::Details::PropertyBase & | getProperty (const std::string &name) const override
| get the property by name More...
StatusCode | getProperty (const std::string &n, std::string &v) const override
| convert the property to the string More...
const std::vector< Gaudi::Details::PropertyBase * > & | getProperties () const override
| get all properties More...
bool | hasProperty (const std::string &name) const override
| Return true if we have a property with the given name. More...
| PropertyHolder (const PropertyHolder &)=delete
PropertyHolder & | operator= (const PropertyHolder &)=delete
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, GaudiHandleBase &ref, const std::string &doc="none")
| Specializations for various GaudiHandles. More...
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, GaudiHandleArrayBase &ref, const std::string &doc="none")
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, DataObjectHandleBase &ref, const std::string &doc="none")
Public Member Functions inherited from CommonMessagingBase
virtual | ~CommonMessagingBase ()=default
| Virtual destructor. More...
SmartIF< IMessageSvc > & | msgSvc () const
| The standard message service. More...
MsgStream & | msgStream () const
| Return an uninitialized MsgStream. More...
MsgStream & | msgStream (const MSG::Level level) const
| Predefined configurable message stream for the efficient printouts. More...
MsgStream & | always () const
| shortcut for the method msgStream(MSG::ALWAYS) More...
MsgStream & | fatal () const
| shortcut for the method msgStream(MSG::FATAL) More...
MsgStream & | err () const
| shortcut for the method msgStream(MSG::ERROR) More...
MsgStream & | error () const
| shortcut for the method msgStream(MSG::ERROR) More...
MsgStream & | warning () const
| shortcut for the method msgStream(MSG::WARNING) More...
MsgStream & | info () const
| shortcut for the method msgStream(MSG::INFO) More...
MsgStream & | debug () const
| shortcut for the method msgStream(MSG::DEBUG) More...
MsgStream & | verbose () const
| shortcut for the method msgStream(MSG::VERBOSE) More...
MsgStream & | msg () const
| shortcut for the method msgStream(MSG::INFO) More...
MSG::Level | msgLevel () const
| get the output level from the embedded MsgStream More...
MSG::Level | outputLevel () const __attribute__((deprecated))
| Backward compatibility function for getting the output level. More...
bool | msgLevel (MSG::Level lvl) const
| get the output level from the embedded MsgStream More...
Public Member Functions inherited from extend_interfaces< Interfaces... >
| ~extend_interfaces () override=default
| Virtual destructor. More...

## Private Member Functions
StatusCode | launchTasks (bool finalize=false)
| Launch tasks to execute the ThreadInitTools. More...

## Private Attributes
ToolHandleArray< IThreadInitTool > | m_threadInitTools
| Handle array of thread init tools. More...
bool | m_init
| Was the thread pool initialized? More...
int | m_threadPoolSize
| Size of the thread pool allocated. More...
tbb::spin_mutex | m_initMutex
| Mutex used to protect the initPool and terminatePool methods. More...
std::unique_ptr< tbb::task_scheduler_init > | m_tbbSchedInit
| TBB task scheduler initializer. More...
std::unique_ptr< boost::barrier > | m_barrier
| Barrier used to synchronization thread init tasks. More...

## Additional Inherited Members
Public Types inherited from extends< Service, IThreadPoolSvc >
using | base_class = extends
| Typedef to this class. More...
using | extend_interfaces_base = extend_interfaces< Interfaces... >
| Typedef to the base of this class. More...
Public Types inherited from Service
typedef Gaudi::PluginService::Factory< IService *, const std::string &, ISvcLocator * > | Factory
Public Types inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
using | PropertyHolderImpl = PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
| Typedef used to refer to this class from derived classes, as in. More...
Public Types inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
using | base_class = CommonMessaging
Public Types inherited from extend_interfaces< Interfaces... >
using | ext_iids = typename Gaudi::interface_list_cat< typename Interfaces::ext_iids... >::type
| take union of the ext_iids of all Interfaces... More...
Protected Member Functions inherited from Service
| ~Service () override
| Standard Destructor. More...
int | outputLevel () const
| get the `Service's` output level More...
Protected Member Functions inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
Gaudi::Details::PropertyBase * | property (const std::string &name) const
Protected Member Functions inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
void | updateMsgStreamOutputLevel (int level)
| Update the output level of the cached MsgStream. More...
Protected Attributes inherited from Service
Gaudi::StateMachine::State | m_state = Gaudi::StateMachine::OFFLINE
| Service state. More...
Gaudi::StateMachine::State | m_targetState = Gaudi::StateMachine::OFFLINE
| Service state. More...
Gaudi::Property< int > | m_outputLevel {this, "OutputLevel", MSG::NIL, "output level"}
Gaudi::Property< bool > | m_auditInit {this, "AuditServices", false, "[[deprecated]] unused"}
Gaudi::Property< bool > | m_auditorInitialize {this, "AuditInitialize", false, "trigger auditor on initialize()"}
Gaudi::Property< bool > | m_auditorStart {this, "AuditStart", false, "trigger auditor on start()"}
Gaudi::Property< bool > | m_auditorStop {this, "AuditStop", false, "trigger auditor on stop()"}
Gaudi::Property< bool > | m_auditorFinalize {this, "AuditFinalize", false, "trigger auditor on finalize()"}
Gaudi::Property< bool > | m_auditorReinitialize {this, "AuditReinitialize", false, "trigger auditor on reinitialize()"}
Gaudi::Property< bool > | m_auditorRestart {this, "AuditRestart", false, "trigger auditor on restart()"}
SmartIF< IAuditorSvc > | m_pAuditorSvc
| Auditor Service. More...

## Detailed Description

A service which initializes a TBB thread pool.

This service can be configured with an array of IThreadInitTools which will each be invoked concurrently on each worker thread. A ThreadInitTask is created for each thread and given the list of tools. A boost::barrier is used to synchronize the calling of each tool concurrently on all threads at the same time.

Definition at line 26 of file ThreadPoolSvc.h.

## Constructor & Destructor Documentation

ThreadPoolSvc::ThreadPoolSvc | ( | const std::string & | name,
|  | ISvcLocator * | svc
| ) |  |

Constructor.

Definition at line 19 of file ThreadPoolSvc.cpp.

20 : base_class( name, svcLoc )
21 , m_threadInitTools( this )
22 , m_init( false )
23 , m_threadPoolSize( 0 )
24 , m_tbbSchedInit( nullptr )
25 , m_barrier( nullptr )
26 {
27
28 declareProperty( "ThreadInitTools", m_threadInitTools, "ToolHandleArray of IThreadInitTools" );
29 }
PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Details::PropertyBase &prop)
Declare a property.
Definition: PropertyHolder.h:99
extends< Service, IThreadPoolSvc >::base_class
extends base_class
Typedef to this class.
Definition: extends.h:15
ThreadPoolSvc::m_threadPoolSize
int m_threadPoolSize
Size of the thread pool allocated.
Definition: ThreadPoolSvc.h:59
ThreadPoolSvc::m_init
bool m_init
Was the thread pool initialized?
Definition: ThreadPoolSvc.h:56
ThreadPoolSvc::m_barrier
std::unique_ptr< boost::barrier > m_barrier
Barrier used to synchronization thread init tasks.
Definition: ThreadPoolSvc.h:68
ThreadPoolSvc::m_tbbSchedInit
std::unique_ptr< tbb::task_scheduler_init > m_tbbSchedInit
TBB task scheduler initializer.
Definition: ThreadPoolSvc.h:65
ThreadPoolSvc::m_threadInitTools
ToolHandleArray< IThreadInitTool > m_threadInitTools
Handle array of thread init tools.
Definition: ThreadPoolSvc.h:53

## Member Function Documentation

StatusCode ThreadPoolSvc::finalize | ( |  | ) |
| final override virtual

Finalise.

Definition at line 60 of file ThreadPoolSvc.cpp.

61 {
62
63 if ( !m_init ) {
64 warning() << "Looks like the ThreadPoolSvc was created, but thread pool "
65 << "was never initialized" << endmsg;
66 }
67
68 return StatusCode::SUCCESS;
69 }
StatusCode::SUCCESS
Definition: StatusCode.h:31
ThreadPoolSvc::m_init
bool m_init
Was the thread pool initialized?
Definition: ThreadPoolSvc.h:56
CommonMessagingBase::warning
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
Definition: CommonMessaging.h:114
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209

StatusCode ThreadPoolSvc::initialize | ( |  | ) |
| final override virtual

Initialise.

Definition at line 33 of file ThreadPoolSvc.cpp.

34 {
35
36 // Initialise mother class (read properties, ...)
37 StatusCode sc( Service::initialize() );
38 if ( !sc.isSuccess() ) {
39 warning() << "Base class could not be initialized" << endmsg;
40 return StatusCode::FAILURE;
41 }
42
43 if ( m_threadInitTools.retrieve().isFailure() ) {
44 error() << "Unable to retrieve ThreadInitTools Array" << endmsg;
45
46 return StatusCode::FAILURE;
47 } else {
48 if ( m_threadInitTools.size() != 0 ) {
49 info() << "retrieved " << m_threadInitTools.size() << " thread init tools" << endmsg;
50 } else {
51 info() << "no thread init tools attached" << endmsg;
52 }
53 }
54
55 return StatusCode::SUCCESS;
56 }
Service::initialize
StatusCode initialize() override
Definition: Service.cpp:64
StatusCode::SUCCESS
Definition: StatusCode.h:31
StatusCode::FAILURE
Definition: StatusCode.h:31
CommonMessagingBase::info
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
Definition: CommonMessaging.h:117
StatusCode::isFailure
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:86
CommonMessagingBase::error
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:111
CommonMessagingBase::warning
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
Definition: CommonMessaging.h:114
GaudiHandleArray::retrieve
StatusCode retrieve()
Retrieve all tools.
Definition: GaudiHandle.h:528
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:28
GaudiHandleArray::size
size_type size() const
Definition: GaudiHandle.h:494
ThreadPoolSvc::m_threadInitTools
ToolHandleArray< IThreadInitTool > m_threadInitTools
Handle array of thread init tools.
Definition: ThreadPoolSvc.h:53
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209

StatusCode ThreadPoolSvc::initPool | ( | const int & | poolSize | ) |
| final override virtual

Initialize the thread pool and launch the ThreadInitTasks.

Definition at line 73 of file ThreadPoolSvc.cpp.

74 {
75
76 tbb::spin_mutex::scoped_lock lock( m_initMutex );
77
78 m_threadPoolSize = poolSize;
79
80 if ( msgLevel( MSG::DEBUG ) ) debug() << "ThreadPoolSvc::initPool() poolSize = " << poolSize << endmsg;
81 // There is a problem in the piece of the code below. if
82 // m_threadPoolSize is set to something negative which is < -1,
83 // algorithm below might not behave as expected. For the time being
84 // I've choosen to create the barrier with the default number of
85 // threads created by the task scheduler init assuming that a
86 // negative value will choose automatic thread creation which will
87 // create default number of threads.
88 // SK
89
90 // -100 prevents the creation of the pool and the scheduler directly
91 // executes the tasks.
92 if ( -100 != m_threadPoolSize ) {
93 if ( msgLevel( MSG::DEBUG ) ) debug() << "Initialising a thread pool of size " << m_threadPoolSize << endmsg;
94
95 // Leave -1 in case selected, increment otherwise
96 // - What?
97 int thePoolSize = m_threadPoolSize;
98 if ( thePoolSize != -1 ) thePoolSize += 1;
99
100 // Create the TBB task scheduler
101 m_tbbSchedInit = std::unique_ptr<tbb::task_scheduler_init>( new tbb::task_scheduler_init( thePoolSize ) );
102 // Create the barrier for task synchronization
103 if ( m_threadPoolSize <= -1 ) thePoolSize = m_tbbSchedInit->default_num_threads();
104 if ( msgLevel( MSG::DEBUG ) ) {
105 debug() << "creating barrier of size " << thePoolSize << endmsg;
106 }
107 Gaudi::Concurrency::ConcurrencyFlags::setNumThreads( thePoolSize );
108
109 m_barrier = std::unique_ptr<boost::barrier>( new boost::barrier( thePoolSize ) );
110
111 } else {
112 Gaudi::Concurrency::ConcurrencyFlags::setNumThreads( 1 );
113 }
114
115 // Launch the init tool tasks
116 const bool terminate = false;
117 if ( launchTasks( terminate ).isFailure() ) return StatusCode::FAILURE;
118
119 if ( msgLevel( MSG::DEBUG ) ) debug() << "Thread Pool initialization complete!" << endmsg;
120
121 m_init = true;
122
123 return StatusCode::SUCCESS;
124 }
Gaudi::Concurrency::ConcurrencyFlags::setNumThreads
static GAUDI_API void setNumThreads(const std::size_t &nT)
Definition: ConcurrencyFlags.h:53
StatusCode::SUCCESS
Definition: StatusCode.h:31
StatusCode::FAILURE
Definition: StatusCode.h:31
MSG::DEBUG
Definition: IMessageSvc.h:16
ThreadPoolSvc::m_threadPoolSize
int m_threadPoolSize
Size of the thread pool allocated.
Definition: ThreadPoolSvc.h:59
ThreadPoolSvc::m_init
bool m_init
Was the thread pool initialized?
Definition: ThreadPoolSvc.h:56
ThreadPoolSvc::poolSize
virtual int poolSize() const override final
Definition: ThreadPoolSvc.h:44
std::lock
T lock(T...args)
ThreadPoolSvc::m_barrier
std::unique_ptr< boost::barrier > m_barrier
Barrier used to synchronization thread init tasks.
Definition: ThreadPoolSvc.h:68
ThreadPoolSvc::m_initMutex
tbb::spin_mutex m_initMutex
Mutex used to protect the initPool and terminatePool methods.
Definition: ThreadPoolSvc.h:62
std::unique_ptr< tbb::task_scheduler_init >
CommonMessagingBase::debug
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
Definition: CommonMessaging.h:120
Service::terminate
StatusCode terminate() override
Definition: Service.h:53
ThreadPoolSvc::m_tbbSchedInit
std::unique_ptr< tbb::task_scheduler_init > m_tbbSchedInit
TBB task scheduler initializer.
Definition: ThreadPoolSvc.h:65
CommonMessagingBase::msgLevel
MSG::Level msgLevel() const
get the output level from the embedded MsgStream
Definition: CommonMessaging.h:129
ThreadPoolSvc::launchTasks
StatusCode launchTasks(bool finalize=false)
Launch tasks to execute the ThreadInitTools.
Definition: ThreadPoolSvc.cpp:149
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209

virtual bool ThreadPoolSvc::isInit | ( |  | ) | const
| inline virtual

Definition at line 46 of file ThreadPoolSvc.h.

46 { return m_init; }
ThreadPoolSvc::m_init
bool m_init
Was the thread pool initialized?
Definition: ThreadPoolSvc.h:56

StatusCode ThreadPoolSvc::launchTasks | ( | bool | finalize = `false` | ) |
| private

Launch tasks to execute the ThreadInitTools.

Definition at line 149 of file ThreadPoolSvc.cpp.

150 {
151
152 if ( m_threadInitTools.empty() ) return StatusCode::SUCCESS;
153
154 const std::string taskType = terminate ? "termination" : "initialization";
155
156 // If we have a thread pool (via a scheduler), then we want to queue
157 // the tasks in TBB to execute on each thread.
158 if ( m_tbbSchedInit ) {
159
160 // Create one task for each worker thread in the pool
161 for ( int i = 0; i < m_threadPoolSize; ++i ) {
162 if ( msgLevel( MSG::DEBUG ) ) debug() << "creating ThreadInitTask " << i << endmsg;
163 tbb::task* t = new ( tbb::task::allocate_root() )
164 ThreadInitTask( m_threadInitTools, m_barrier.get(), serviceLocator(), terminate );
165
166 // Queue the task
167 tbb::task::enqueue( *t );
168 this_tbb_thread::sleep( tbb::tick_count::interval_t( .1 ) );
169 }
170
171 // Now wait for all the workers to reach the barrier
172 if ( msgLevel( MSG::DEBUG ) ) debug() << "waiting at barrier for all ThreadInitTool to finish executing" << endmsg;
173 m_barrier->wait();
174
175 // Check to make sure all Tools were invoked.
176 // I'm not sure this mechanism is worthwhile.
177 for ( auto& t : m_threadInitTools ) {
178 // Number of threads initialized but not terminated.
179 int numInit = t->nInit();
180 // Expected number based on the type of task.
181 int expectedNumInit = terminate ? 0 : m_threadPoolSize;
182 if ( numInit != expectedNumInit ) {
183 error() << "not all threads " << ( terminate ? "terminated" : "initialized" ) << " for tool " << t << " : "
184 << t->nInit() << " out of " << m_threadPoolSize << " are currently active" << endmsg;
185 return StatusCode::FAILURE;
186 }
187 }
188
189 }
190
191 // In single-threaded mode, there is no scheduler, so we simply call
192 // the task wrapper directly in this thread.
193 else {
194 if ( msgLevel( MSG::DEBUG ) ) debug() << "launching ThreadInitTask " << taskType << "in this thread." << endmsg;
195 boost::barrier* noBarrier = nullptr;
196 ThreadInitTask theTask( m_threadInitTools, noBarrier, serviceLocator(), terminate );
197 theTask.execute();
198 }
199
200 // Now, we do some error checking
201 if ( ThreadInitTask::execFailed() ) {
202 error() << "a ThreadInitTask failed to execute successfully" << endmsg;
203 return StatusCode::FAILURE;
204 }
205
206 return StatusCode::SUCCESS;
207 }
StatusCode::SUCCESS
Definition: StatusCode.h:31
StatusCode::FAILURE
Definition: StatusCode.h:31
MSG::DEBUG
Definition: IMessageSvc.h:16
ThreadInitTask
Special TBB task used by ThreadPoolSvc to wrap execution of IThreadInitTools.
Definition: ThreadInitTask.h:21
ThreadPoolSvc::m_threadPoolSize
int m_threadPoolSize
Size of the thread pool allocated.
Definition: ThreadPoolSvc.h:59
std::string
STL class.
CommonMessagingBase::error
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:111
ThreadInitTask::execFailed
static bool execFailed()
Definition: ThreadInitTask.h:36
ThreadPoolSvc::m_barrier
std::unique_ptr< boost::barrier > m_barrier
Barrier used to synchronization thread init tasks.
Definition: ThreadPoolSvc.h:68
GaudiHandleArray::empty
bool empty() const override
Return whether the list of tools is empty.
Definition: GaudiHandle.h:498
std::unique_ptr::get
T get(T...args)
CommonMessagingBase::debug
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
Definition: CommonMessaging.h:120
Service::terminate
StatusCode terminate() override
Definition: Service.h:53
ThreadPoolSvc::m_tbbSchedInit
std::unique_ptr< tbb::task_scheduler_init > m_tbbSchedInit
TBB task scheduler initializer.
Definition: ThreadPoolSvc.h:65
ThreadPoolSvc::m_threadInitTools
ToolHandleArray< IThreadInitTool > m_threadInitTools
Handle array of thread init tools.
Definition: ThreadPoolSvc.h:53
CommonMessagingBase::msgLevel
MSG::Level msgLevel() const
get the output level from the embedded MsgStream
Definition: CommonMessaging.h:129
Service::serviceLocator
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator.
Definition: Service.cpp:292
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209

virtual int ThreadPoolSvc::poolSize | ( |  | ) | const
| inline final override virtual

Definition at line 44 of file ThreadPoolSvc.h.

44 { return m_threadPoolSize; }
ThreadPoolSvc::m_threadPoolSize
int m_threadPoolSize
Size of the thread pool allocated.
Definition: ThreadPoolSvc.h:59

StatusCode ThreadPoolSvc::terminatePool | ( |  | ) |
| final override virtual

Terminate the thread pool and launch thread termination tasks.

Definition at line 128 of file ThreadPoolSvc.cpp.

129 {
130 tbb::spin_mutex::scoped_lock lock( m_initMutex );
131 if ( msgLevel( MSG::DEBUG ) ) debug() << "ThreadPoolSvc::terminatePool()" << endmsg;
132
133 if ( !m_init ) {
134 error() << "Trying to terminate uninitialized thread pool!" << endmsg;
135 return StatusCode::FAILURE;
136 }
137
138 // Launch the termination tasks
139 const bool terminate = true;
140 if ( launchTasks( terminate ).isFailure() ) return StatusCode::FAILURE;
141
142 if ( msgLevel( MSG::DEBUG ) ) debug() << "Thread pool termination complete!" << endmsg;
143
144 return StatusCode::SUCCESS;
145 }
StatusCode::SUCCESS
Definition: StatusCode.h:31
StatusCode::FAILURE
Definition: StatusCode.h:31
MSG::DEBUG
Definition: IMessageSvc.h:16
CommonMessagingBase::error
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:111
ThreadPoolSvc::m_init
bool m_init
Was the thread pool initialized?
Definition: ThreadPoolSvc.h:56
std::lock
T lock(T...args)
ThreadPoolSvc::m_initMutex
tbb::spin_mutex m_initMutex
Mutex used to protect the initPool and terminatePool methods.
Definition: ThreadPoolSvc.h:62
CommonMessagingBase::debug
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
Definition: CommonMessaging.h:120
Service::terminate
StatusCode terminate() override
Definition: Service.h:53
CommonMessagingBase::msgLevel
MSG::Level msgLevel() const
get the output level from the embedded MsgStream
Definition: CommonMessaging.h:129
ThreadPoolSvc::launchTasks
StatusCode launchTasks(bool finalize=false)
Launch tasks to execute the ThreadInitTools.
Definition: ThreadPoolSvc.cpp:149
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209

## Member Data Documentation

std::unique_ptr<boost::barrier> ThreadPoolSvc::m_barrier
| private

Barrier used to synchronization thread init tasks.

Definition at line 68 of file ThreadPoolSvc.h.

bool ThreadPoolSvc::m_init
| private

Was the thread pool initialized?

Definition at line 56 of file ThreadPoolSvc.h.

tbb::spin_mutex ThreadPoolSvc::m_initMutex
| private

Mutex used to protect the initPool and terminatePool methods.

Definition at line 62 of file ThreadPoolSvc.h.

std::unique_ptr<tbb::task_scheduler_init> ThreadPoolSvc::m_tbbSchedInit
| private

TBB task scheduler initializer.

Definition at line 65 of file ThreadPoolSvc.h.

ToolHandleArray<IThreadInitTool> ThreadPoolSvc::m_threadInitTools
| private

Handle array of thread init tools.

Definition at line 53 of file ThreadPoolSvc.h.

int ThreadPoolSvc::m_threadPoolSize
| private

Size of the thread pool allocated.

Definition at line 59 of file ThreadPoolSvc.h.

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

- GaudiHive/src/ThreadPoolSvc.h
- GaudiHive/src/ThreadPoolSvc.cpp