Geant4-11
Public Types | Public Member Functions | Private Member Functions
PTL::TemplateAutoLock< MutexT > Class Template Reference

#include <AutoLock.hh>

Inheritance diagram for PTL::TemplateAutoLock< MutexT >:

Public Types

typedef unique_lock_t::mutex_type mutex_type
 
typedef TemplateAutoLock< MutexT > this_type
 
typedef std::unique_lock< MutexT > unique_lock_t
 

Public Member Functions

 TemplateAutoLock (mutex_type &_mutex)
 
template<typename Rep , typename Period >
 TemplateAutoLock (mutex_type &_mutex, const std::chrono::duration< Rep, Period > &_timeout_duration)
 
template<typename Clock , typename Duration >
 TemplateAutoLock (mutex_type &_mutex, const std::chrono::time_point< Clock, Duration > &_timeout_time)
 
 TemplateAutoLock (mutex_type &_mutex, std::adopt_lock_t _lock)
 
 TemplateAutoLock (mutex_type &_mutex, std::defer_lock_t _lock) noexcept
 
 TemplateAutoLock (mutex_type &_mutex, std::try_to_lock_t _lock)
 
 TemplateAutoLock (mutex_type *_mutex)
 
 TemplateAutoLock (mutex_type *_mutex, std::adopt_lock_t _lock)
 
 TemplateAutoLock (mutex_type *_mutex, std::defer_lock_t _lock) noexcept
 
 TemplateAutoLock (mutex_type *_mutex, std::try_to_lock_t _lock)
 

Private Member Functions

void _lock_deferred ()
 
template<typename Rep , typename Period >
void _lock_deferred (const std::chrono::duration< Rep, Period > &_timeout_duration)
 
template<typename Clock , typename Duration >
void _lock_deferred (const std::chrono::time_point< Clock, Duration > &_timeout_time)
 
template<typename Tp = MutexT, typename std::enable_if< _is_stand_mutex(Tp), int >::type = 0>
std::string GetTypeString ()
 
template<typename Tp = MutexT, typename std::enable_if< _is_recur_mutex(Tp), int >::type = 0>
std::string GetTypeString ()
 
template<typename Tp = MutexT, typename std::enable_if< _is_other_mutex(Tp), int >::type = 0>
std::string GetTypeString ()
 
void PrintLockErrorMessage (std::system_error &e)
 
template<typename Tp >
void suppress_unused_variable (const Tp &)
 

Detailed Description

template<typename MutexT>
class PTL::TemplateAutoLock< MutexT >

Definition at line 259 of file AutoLock.hh.

Member Typedef Documentation

◆ mutex_type

template<typename MutexT >
typedef unique_lock_t::mutex_type PTL::TemplateAutoLock< MutexT >::mutex_type

Definition at line 267 of file AutoLock.hh.

◆ this_type

template<typename MutexT >
typedef TemplateAutoLock<MutexT> PTL::TemplateAutoLock< MutexT >::this_type

Definition at line 266 of file AutoLock.hh.

◆ unique_lock_t

template<typename MutexT >
typedef std::unique_lock<MutexT> PTL::TemplateAutoLock< MutexT >::unique_lock_t

Definition at line 265 of file AutoLock.hh.

Constructor & Destructor Documentation

◆ TemplateAutoLock() [1/10]

template<typename MutexT >
PTL::TemplateAutoLock< MutexT >::TemplateAutoLock ( mutex_type _mutex)
inlineexplicit

Definition at line 278 of file AutoLock.hh.

279 : unique_lock_t(_mutex, std::defer_lock)
280 {
281 // call termination-safe locking. if serial, this call has no effect
283 }
std::unique_lock< MutexT > unique_lock_t
Definition: AutoLock.hh:265

References PTL::TemplateAutoLock< MutexT >::_lock_deferred().

◆ TemplateAutoLock() [2/10]

template<typename MutexT >
template<typename Rep , typename Period >
PTL::TemplateAutoLock< MutexT >::TemplateAutoLock ( mutex_type _mutex,
const std::chrono::duration< Rep, Period > &  _timeout_duration 
)
inline

Definition at line 290 of file AutoLock.hh.

292 : unique_lock_t(_mutex, std::defer_lock)
293 {
294 // call termination-safe locking. if serial, this call has no effect
295 _lock_deferred(_timeout_duration);
296 }

References PTL::TemplateAutoLock< MutexT >::_lock_deferred().

◆ TemplateAutoLock() [3/10]

template<typename MutexT >
template<typename Clock , typename Duration >
PTL::TemplateAutoLock< MutexT >::TemplateAutoLock ( mutex_type _mutex,
const std::chrono::time_point< Clock, Duration > &  _timeout_time 
)
inline

Definition at line 303 of file AutoLock.hh.

305 : unique_lock_t(_mutex, std::defer_lock)
306 {
307 // call termination-safe locking. if serial, this call has no effect
308 _lock_deferred(_timeout_time);
309 }

References PTL::TemplateAutoLock< MutexT >::_lock_deferred().

◆ TemplateAutoLock() [4/10]

template<typename MutexT >
PTL::TemplateAutoLock< MutexT >::TemplateAutoLock ( mutex_type _mutex,
std::defer_lock_t  _lock 
)
inlinenoexcept

Definition at line 312 of file AutoLock.hh.

313 : unique_lock_t(_mutex, _lock)
314 {}

◆ TemplateAutoLock() [5/10]

template<typename MutexT >
PTL::TemplateAutoLock< MutexT >::TemplateAutoLock ( mutex_type _mutex,
std::try_to_lock_t  _lock 
)
inline

Definition at line 319 of file AutoLock.hh.

320 : unique_lock_t(_mutex, _lock)
321 {}

◆ TemplateAutoLock() [6/10]

template<typename MutexT >
PTL::TemplateAutoLock< MutexT >::TemplateAutoLock ( mutex_type _mutex,
std::adopt_lock_t  _lock 
)
inline

Definition at line 324 of file AutoLock.hh.

325 : unique_lock_t(_mutex, _lock)
326 {}

◆ TemplateAutoLock() [7/10]

template<typename MutexT >
PTL::TemplateAutoLock< MutexT >::TemplateAutoLock ( mutex_type _mutex)
inline

Definition at line 332 of file AutoLock.hh.

333 : unique_lock_t(*_mutex, std::defer_lock)
334 {
335 // call termination-safe locking. if serial, this call has no effect
337 }

References PTL::TemplateAutoLock< MutexT >::_lock_deferred().

◆ TemplateAutoLock() [8/10]

template<typename MutexT >
PTL::TemplateAutoLock< MutexT >::TemplateAutoLock ( mutex_type _mutex,
std::defer_lock_t  _lock 
)
inlinenoexcept

Definition at line 339 of file AutoLock.hh.

340 : unique_lock_t(*_mutex, _lock)
341 {}

◆ TemplateAutoLock() [9/10]

template<typename MutexT >
PTL::TemplateAutoLock< MutexT >::TemplateAutoLock ( mutex_type _mutex,
std::try_to_lock_t  _lock 
)
inline

Definition at line 343 of file AutoLock.hh.

344 : unique_lock_t(*_mutex, _lock)
345 {}

◆ TemplateAutoLock() [10/10]

template<typename MutexT >
PTL::TemplateAutoLock< MutexT >::TemplateAutoLock ( mutex_type _mutex,
std::adopt_lock_t  _lock 
)
inline

Definition at line 347 of file AutoLock.hh.

348 : unique_lock_t(*_mutex, _lock)
349 {}

Member Function Documentation

◆ _lock_deferred() [1/3]

template<typename MutexT >
void PTL::TemplateAutoLock< MutexT >::_lock_deferred ( )
inlineprivate

Definition at line 408 of file AutoLock.hh.

409 {
410 try
411 {
412 this->unique_lock_t::lock();
413 } catch(std::system_error& e)
414 {
416 }
417 }
void PrintLockErrorMessage(std::system_error &e)
Definition: AutoLock.hh:456

References PTL::TemplateAutoLock< MutexT >::PrintLockErrorMessage().

Referenced by PTL::TemplateAutoLock< MutexT >::TemplateAutoLock().

◆ _lock_deferred() [2/3]

template<typename MutexT >
template<typename Rep , typename Period >
void PTL::TemplateAutoLock< MutexT >::_lock_deferred ( const std::chrono::duration< Rep, Period > &  _timeout_duration)
inlineprivate

Definition at line 425 of file AutoLock.hh.

426 {
427 try
428 {
429 this->unique_lock_t::try_lock_for(_timeout_duration);
430 } catch(std::system_error& e)
431 {
433 }
434 }

References PTL::TemplateAutoLock< MutexT >::PrintLockErrorMessage().

◆ _lock_deferred() [3/3]

template<typename MutexT >
template<typename Clock , typename Duration >
void PTL::TemplateAutoLock< MutexT >::_lock_deferred ( const std::chrono::time_point< Clock, Duration > &  _timeout_time)
inlineprivate

Definition at line 442 of file AutoLock.hh.

443 {
444 try
445 {
446 this->unique_lock_t::try_lock_until(_timeout_time);
447 } catch(std::system_error& e)
448 {
450 }
451 }

References PTL::TemplateAutoLock< MutexT >::PrintLockErrorMessage().

◆ GetTypeString() [1/3]

template<typename MutexT >
template<typename Tp = MutexT, typename std::enable_if< _is_stand_mutex(Tp), int >::type = 0>
std::string PTL::TemplateAutoLock< MutexT >::GetTypeString ( )
inlineprivate

Definition at line 359 of file AutoLock.hh.

360 {
361 return "AutoLock<Mutex>";
362 }

◆ GetTypeString() [2/3]

template<typename MutexT >
template<typename Tp = MutexT, typename std::enable_if< _is_recur_mutex(Tp), int >::type = 0>
std::string PTL::TemplateAutoLock< MutexT >::GetTypeString ( )
inlineprivate

Definition at line 366 of file AutoLock.hh.

367 {
368 return "AutoLock<RecursiveMutex>";
369 }

◆ GetTypeString() [3/3]

template<typename MutexT >
template<typename Tp = MutexT, typename std::enable_if< _is_other_mutex(Tp), int >::type = 0>
std::string PTL::TemplateAutoLock< MutexT >::GetTypeString ( )
inlineprivate

Definition at line 373 of file AutoLock.hh.

374 {
375 return "AutoLock<UNKNOWN_MUTEX>";
376 }

◆ PrintLockErrorMessage()

template<typename MutexT >
void PTL::TemplateAutoLock< MutexT >::PrintLockErrorMessage ( std::system_error &  e)
inlineprivate

Definition at line 456 of file AutoLock.hh.

457 {
458 // use std::cout/std::endl to avoid include dependencies
459 using std::cout;
460 using std::endl;
461 // the error that comes from locking an unavailable mutex
462#if defined(VERBOSE)
463 cout << "Non-critical error: mutex lock failure in "
464 << GetTypeString<mutex_type>() << ". "
465 << "If the app is terminating, Tasking failed to "
466 << "delete an allocated resource and a Tasking destructor is "
467 << "being called after the statics were destroyed. \n\t--> "
468 << "Exception: [code: " << e.code() << "] caught: " << e.what() << std::endl;
469#else
471#endif
472 }
void suppress_unused_variable(const Tp &)
Definition: AutoLock.hh:385

References PTL::TemplateAutoLock< MutexT >::suppress_unused_variable().

Referenced by PTL::TemplateAutoLock< MutexT >::_lock_deferred().

◆ suppress_unused_variable()

template<typename MutexT >
template<typename Tp >
void PTL::TemplateAutoLock< MutexT >::suppress_unused_variable ( const Tp &  )
inlineprivate

Definition at line 385 of file AutoLock.hh.

386 {}

Referenced by PTL::TemplateAutoLock< MutexT >::PrintLockErrorMessage().


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