CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Static Public Member Functions | Public Attributes
FastTimerService::ThreadGuard Struct Reference

Classes

struct  specific_t
 

Public Member Functions

void finalize ()
 
bool register_thread (FastTimerService::AtomicResources &r)
 
Measurementthread ()
 
 ThreadGuard ()
 
 ~ThreadGuard ()=default
 

Static Public Member Functions

static std::shared_ptr< specific_t > * ptr (void *p)
 
static void retire_thread (void *t)
 

Public Attributes

pthread_key_t key_
 
tbb::concurrent_vector< std::shared_ptr< specific_t > > thread_resources_
 

Detailed Description

Definition at line 460 of file FastTimerService.h.

Constructor & Destructor Documentation

◆ ThreadGuard()

FastTimerService::ThreadGuard::ThreadGuard ( )

Definition at line 1669 of file FastTimerService.cc.

1669  {
1670  auto err = ::pthread_key_create(&key_, retire_thread);
1671  if (err) {
1672  throw cms::Exception("FastTimerService") << "ThreadGuard key creation failed: " << ::strerror(err);
1673  }
1674 }

References submitPVResolutionJobs::err, Exception, key_, and retire_thread().

◆ ~ThreadGuard()

FastTimerService::ThreadGuard::~ThreadGuard ( )
default

Member Function Documentation

◆ finalize()

void FastTimerService::ThreadGuard::finalize ( void  )

Definition at line 1708 of file FastTimerService.cc.

1708  {
1709  for (auto& p : thread_resources_) {
1710  auto expected = true;
1711  if (p->live_.compare_exchange_strong(expected, false)) {
1712  p->measurement_.measure_and_accumulate(p->resource_);
1713  }
1714  }
1715 }

References AlCaHLTBitMon_ParallelJobs::p.

◆ ptr()

std::shared_ptr< FastTimerService::ThreadGuard::specific_t > * FastTimerService::ThreadGuard::ptr ( void *  p)
static

Definition at line 1692 of file FastTimerService.cc.

1692  {
1693  return static_cast<std::shared_ptr<specific_t>*>(p);
1694 }

References AlCaHLTBitMon_ParallelJobs::p.

◆ register_thread()

bool FastTimerService::ThreadGuard::register_thread ( FastTimerService::AtomicResources r)

Definition at line 1677 of file FastTimerService.cc.

1677  {
1678  auto ptr = ::pthread_getspecific(key_);
1679 
1680  if (not ptr) {
1681  auto p = thread_resources_.emplace_back(std::make_shared<specific_t>(r));
1682  auto pp = new std::shared_ptr<specific_t>(*p);
1683  auto err = ::pthread_setspecific(key_, pp);
1684  if (err) {
1685  throw cms::Exception("FastTimerService") << "ThreadGuard pthread_setspecific failed: " << ::strerror(err);
1686  }
1687  return true;
1688  }
1689  return false;
1690 }

References submitPVResolutionJobs::err, Exception, AlCaHLTBitMon_ParallelJobs::p, createTree::pp, and alignCSCRings::r.

Referenced by FastTimerService::on_scheduler_entry().

◆ retire_thread()

void FastTimerService::ThreadGuard::retire_thread ( void *  t)
static

Definition at line 1697 of file FastTimerService.cc.

1697  {
1698  auto ps = ptr(p);
1699  auto expected = true;
1700  if ((*ps)->live_.compare_exchange_strong(expected, false)) {
1701  // account any resources used or freed by the thread before leaving the TBB pool
1702  (*ps)->measurement_.measure_and_accumulate((*ps)->resource_);
1703  }
1704  delete ps;
1705 }

References AlCaHLTBitMon_ParallelJobs::p.

Referenced by ThreadGuard().

◆ thread()

FastTimerService::Measurement & FastTimerService::ThreadGuard::thread ( )

Definition at line 1717 of file FastTimerService.cc.

1717  {
1718  return (*ptr(::pthread_getspecific(key_)))->measurement_;
1719 }

Referenced by FastTimerService::thread().

Member Data Documentation

◆ key_

pthread_key_t FastTimerService::ThreadGuard::key_

Definition at line 481 of file FastTimerService.h.

Referenced by ThreadGuard().

◆ thread_resources_

tbb::concurrent_vector<std::shared_ptr<specific_t> > FastTimerService::ThreadGuard::thread_resources_

Definition at line 480 of file FastTimerService.h.

FastTimerService::ThreadGuard::retire_thread
static void retire_thread(void *t)
Definition: FastTimerService.cc:1697
FastTimerService::ThreadGuard::thread_resources_
tbb::concurrent_vector< std::shared_ptr< specific_t > > thread_resources_
Definition: FastTimerService.h:480
AlCaHLTBitMon_ParallelJobs.p
def p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
submitPVResolutionJobs.err
err
Definition: submitPVResolutionJobs.py:85
alignCSCRings.r
r
Definition: alignCSCRings.py:93
FastTimerService::ThreadGuard::key_
pthread_key_t key_
Definition: FastTimerService.h:481
Exception
Definition: hltDiff.cc:245
createTree.pp
pp
Definition: createTree.py:17
FastTimerService::ThreadGuard::ptr
static std::shared_ptr< specific_t > * ptr(void *p)
Definition: FastTimerService.cc:1692