ATLAS Offline Software
Simulation
G4Atlas
G4AtlasTools
G4AtlasTools
ThreadLocalHolder.h
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#ifndef G4ATLASTOOLS_THREADLOCALHOLDER_H
6
#define G4ATLASTOOLS_THREADLOCALHOLDER_H
7
22
23
24
// System includes
25
#include <thread>
26
#include <utility>
27
28
// Other includes
29
#include "tbb/concurrent_unordered_map.h"
30
31
32
namespace
thread_utils
33
{
34
47
template
<
class
T>
48
class
ThreadLocalHolder
49
{
50
51
public
:
52
53
using
MapKey_t
=
std::thread::id
;
54
using
MapVal_t
= T*;
55
using
MapHash_t
= std::hash<MapKey_t>;
56
using
ThreadMap_t
=
57
tbb::concurrent_unordered_map< MapKey_t, MapVal_t, MapHash_t >;
58
60
T*
get
() {
61
auto
itr =
m_threadMap
.find( std::this_thread::get_id() );
62
if
(itr ==
m_threadMap
.end())
return
nullptr
;
63
return
itr->second;
64
}
65
67
void
set
(T*
obj
) {
68
const
auto
tid = std::this_thread::get_id();
69
m_threadMap
.insert( std::make_pair(tid,
obj
) );
70
}
71
73
const
ThreadMap_t
&
getMap
()
const
{
74
return
m_threadMap
;
75
}
76
77
protected
:
78
80
ThreadMap_t
m_threadMap
;
81
82
};
// class ThreadLocalHolder
83
84
92
template
<
class
T>
93
class
ThreadLocalOwner
:
public
ThreadLocalHolder
<T>
94
{
95
public
:
97
~ThreadLocalOwner
() {
98
for
(
auto
& mapPair : this->
m_threadMap
)
99
delete
mapPair.second;
100
}
101
};
// class ThreadLocalOwner
102
103
}
// namespace thread_utils
104
105
#endif
thread_utils::ThreadLocalOwner
A ThreadLocalHolder which owns its objects.
Definition:
ThreadLocalHolder.h:94
thread_utils::ThreadLocalHolder< G4MagneticField >::MapHash_t
std::hash< MapKey_t > MapHash_t
Definition:
ThreadLocalHolder.h:55
thread_utils::ThreadLocalHolder::getMap
const ThreadMap_t & getMap() const
Constant access for iteration, etc.
Definition:
ThreadLocalHolder.h:73
thread_utils::ThreadLocalHolder::set
void set(T *obj)
Assign the object of the current thread.
Definition:
ThreadLocalHolder.h:67
thread_utils::ThreadLocalHolder< G4MagneticField >::MapKey_t
std::thread::id MapKey_t
Definition:
ThreadLocalHolder.h:53
thread_utils::ThreadLocalHolder::get
T * get()
Get the object of the current thread.
Definition:
ThreadLocalHolder.h:60
id
SG::auxid_t id
Definition:
Control/AthContainers/Root/debug.cxx:227
thread_utils::ThreadLocalHolder< G4MagneticField >::MapVal_t
G4MagneticField * MapVal_t
Definition:
ThreadLocalHolder.h:54
thread_utils::ThreadLocalHolder< G4MagneticField >::ThreadMap_t
tbb::concurrent_unordered_map< MapKey_t, MapVal_t, MapHash_t > ThreadMap_t
Definition:
ThreadLocalHolder.h:57
thread_utils::ThreadLocalHolder::m_threadMap
ThreadMap_t m_threadMap
The wrapped thread-local storage container.
Definition:
ThreadLocalHolder.h:80
thread_utils
Definition:
ThreadLocalHolder.h:33
python.PyAthena.obj
obj
Definition:
PyAthena.py:132
thread_utils::ThreadLocalOwner::~ThreadLocalOwner
~ThreadLocalOwner()
Destructor will clean up the storage.
Definition:
ThreadLocalHolder.h:97
thread_utils::ThreadLocalHolder
A thread-local storage wrapper.
Definition:
ThreadLocalHolder.h:49
Generated on Sun Dec 22 2024 21:19:32 for ATLAS Offline Software by
1.8.18