Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
threading.h
Go to the documentation of this file.
1 // This file's extension implies that it's C, but it's really -*- C++ -*-.
2 /*
3  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
4 */
17 #ifndef ATHCONTAINERS_THREADING_H
18 #define ATHCONTAINERS_THREADING_H
19 
20 
21 #ifdef ATHCONTAINERS_NO_THREADS
22 
23 
24 namespace AthContainers_detail {
25 
26 
30 class mutex {};
31 
32 
36 class recursive_mutex {};
37 
38 
42 template <class LOCKABLE>
43 class lock_guard
44 {
45 public:
46  lock_guard() {}
47  lock_guard(LOCKABLE&) {}
48 };
49 
50 
52 inline void fence_acq_rel() {}
53 inline void fence_seq_cst() {}
54 
55 
57 template <class T>
58 class atomic
59 {
60 public:
61  atomic() : m_val() {}
62  operator T() const { return m_val; }
63  atomic& operator= (const T& val) { m_val = val; return *this; }
64 
65 private:
66  T m_val;
67 };
68 
69 
70 } // namespace AthContainers_detail
71 
72 
73 #else // not ATHCONTAINERS_NO_THREADS
74 
75 //the shared_mutex include generates annoying unused_variable warnings during compilations... silence this in athanalysisbase
76 #ifdef XAOD_ANALYSIS
77 #ifndef BOOST_SYSTEM_NO_DEPRECATED
78 #define BOOST_SYSTEM_NO_DEPRECATED 1
79 #endif
80 #endif
81 
82 
83 #include <atomic>
84 #include <mutex>
85 #include <thread>
86 
87 
88 namespace AthContainers_detail {
89 
90 
91 using std::mutex;
92 using std::recursive_mutex;
93 using std::lock_guard;
94 using std::thread;
95 using std::atomic;
96 
97 
102 
103 
108 
109 
110 } // namespace AthContainers_detail
111 
112 
113 #endif // not ATHCONTAINERS_NO_THREADS
114 
115 
116 
117 namespace AthContainers_detail {
118 
119 
126 template <typename LOCKABLE>
128 {
129 public:
131  typedef LOCKABLE lockable_type;
132 
133 
139 
140 
146 
147 
152 
153 
154 private:
155  // Disallow these.
159 
160 
161 private:
164 };
165 
166 
175 template <class LOCKABLE>
177 {
178 public:
180  typedef LOCKABLE lockable_type;
181 
182 
188 
189 
194 
195 
199  void upgrade();
200 
201 
202 private:
203  // Disallow these.
207 
208 
209 private:
212 
215 };
216 
217 
218 } // namespace AthContainers_detail
219 
220 
222 
223 
224 #endif // not ATHCONTAINERS_THREADING_H
AthContainers_detail::fence_acq_rel
void fence_acq_rel()
An acquire/release fence.
AthContainers_detail::upgrading_lock::upgrading_lock
upgrading_lock(upgrading_lock const &)
AthContainers_detail::upgrading_lock::upgrading_lock
upgrading_lock()
AthContainers_detail::upgrading_lock::~upgrading_lock
~upgrading_lock()
Release the held lock.
AthContainers_detail::strict_shared_lock::strict_shared_lock
strict_shared_lock(const lockable_type &obj)
Take out a shared lock on obj and remember it.
AthContainers_detail::strict_shared_lock::strict_shared_lock
strict_shared_lock()
BeamSpot::mutex
std::mutex mutex
Definition: InDetBeamSpotVertex.cxx:18
AthContainers_detail::upgrading_lock::upgrading_lock
upgrading_lock(lockable_type &obj)
Take out an upgrade lock on obj and remember it.
AthContainers_detail::strict_shared_lock::strict_shared_lock
strict_shared_lock(lockable_type &obj)
Take out a shared lock on obj and remember it.
AthContainers_detail::strict_shared_lock::strict_shared_lock
strict_shared_lock(strict_shared_lock const &)
AthContainers_detail::fence_seq_cst
void fence_seq_cst()
A sequentially-consistent fence.
AthContainers_detail
Definition: concurrent_vector.h:54
AthContainers_detail::strict_shared_lock::lockable_type
LOCKABLE lockable_type
The underlying object type.
Definition: threading.h:131
AthContainers_detail::strict_shared_lock
Lock object for taking out shared locks.
Definition: threading.h:128
AthContainers_detail::upgrading_lock::upgrade
void upgrade()
Convert the lock from upgrade to exclusive.
AthContainers_detail::strict_shared_lock::~strict_shared_lock
~strict_shared_lock()
Release the held lock.
AthContainers_detail::upgrading_lock::operator=
upgrading_lock & operator=(upgrading_lock const &)
AthContainers_detail::upgrading_lock::lockable_type
LOCKABLE lockable_type
The underlying object type.
Definition: threading.h:180
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
AthContainers_detail::upgrading_lock::m_obj
lockable_type & m_obj
The lock being held.
Definition: threading.h:211
AthContainers_detail::upgrading_lock
Lock object for taking out upgradable locks.
Definition: threading.h:177
AthContainers_detail::strict_shared_lock::m_obj
lockable_type & m_obj
The lock being held.
Definition: threading.h:163
python.PyAthena.obj
obj
Definition: PyAthena.py:132
AthContainers_detail::upgrading_lock::m_exclusive
bool m_exclusive
Has the lock been converted to exclusive?
Definition: threading.h:214
AthContainers_detail::strict_shared_lock::operator=
strict_shared_lock & operator=(strict_shared_lock const &)
TSU::T
unsigned long long T
Definition: L1TopoDataTypes.h:35
threading.icc