Skip to content

Commit 2de9273

Browse files
committed
renaming variables, remove some locks
1 parent 0d3d6dc commit 2de9273

File tree

1 file changed

+25
-29
lines changed

1 file changed

+25
-29
lines changed

offload/include/PerThreadTable.h

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ template <typename ObjectType> struct PerThread {
3535
PerThread &operator=(const PerThread &) = delete;
3636
PerThread &operator=(PerThread &&) = delete;
3737
~PerThread() {
38-
std::lock_guard<std::mutex> Lock(Mutex);
3938
ThreadDataList.clear();
4039
}
4140

@@ -63,7 +62,6 @@ template <typename ObjectType> struct PerThread {
6362
ObjectType &get() { return getThreadEntry(); }
6463

6564
template <class F> void clear(F f) {
66-
std::lock_guard<std::mutex> Lock(Mutex);
6765
for (auto ThData : ThreadDataList) {
6866
if (!ThData->ThEntry)
6967
continue;
@@ -107,10 +105,10 @@ template <typename ContainerType, typename ObjectType> struct PerThreadTable {
107105

108106
struct PerThreadData {
109107
size_t NElements = 0;
110-
std::unique_ptr<ContainerType> ThEntry;
108+
std::unique_ptr<ContainerType> ThreadEntry;
111109
};
112110

113-
std::mutex Mtx;
111+
std::mutex Mutex;
114112
std::list<std::shared_ptr<PerThreadData>> ThreadDataList;
115113

116114
// define default constructors, disable copy and move constructors
@@ -120,33 +118,32 @@ template <typename ContainerType, typename ObjectType> struct PerThreadTable {
120118
PerThreadTable &operator=(const PerThreadTable &) = delete;
121119
PerThreadTable &operator=(PerThreadTable &&) = delete;
122120
~PerThreadTable() {
123-
std::lock_guard<std::mutex> Lock(Mtx);
124121
ThreadDataList.clear();
125122
}
126123

127124
private:
128125
PerThreadData &getThreadData() {
129-
static thread_local std::shared_ptr<PerThreadData> ThData = nullptr;
130-
if (!ThData) {
131-
ThData = std::make_shared<PerThreadData>();
132-
std::lock_guard<std::mutex> Lock(Mtx);
133-
ThreadDataList.push_back(ThData);
126+
static thread_local std::shared_ptr<PerThreadData> ThreadData = nullptr;
127+
if (!ThreadData) {
128+
ThreadData = std::make_shared<PerThreadData>();
129+
std::lock_guard<std::mutex> Lock(Mutex);
130+
ThreadDataList.push_back(ThreadData);
134131
}
135-
return *ThData;
132+
return *ThreadData;
136133
}
137134

138135
protected:
139136
ContainerType &getThreadEntry() {
140-
auto &ThData = getThreadData();
141-
if (ThData.ThEntry)
142-
return *ThData.ThEntry;
143-
ThData.ThEntry = std::make_unique<ContainerType>();
144-
return *ThData.ThEntry;
137+
auto &ThreadData = getThreadData();
138+
if (ThreadData.ThreadEntry)
139+
return *ThreadData.ThreadEntry;
140+
ThreadData.ThreadEntry = std::make_unique<ContainerType>();
141+
return *ThreadData.ThreadEntry;
145142
}
146143

147144
size_t &getThreadNElements() {
148-
auto &ThData = getThreadData();
149-
return ThData.NElements;
145+
auto &ThreadData = getThreadData();
146+
return ThreadData.NElements;
150147
}
151148

152149
void setNElements(size_t Size) {
@@ -183,36 +180,35 @@ template <typename ContainerType, typename ObjectType> struct PerThreadTable {
183180
}
184181

185182
template <class F> void clear(F f) {
186-
std::lock_guard<std::mutex> Lock(Mtx);
187-
for (auto ThData : ThreadDataList) {
188-
if (!ThData->ThEntry || ThData->NElements == 0)
183+
std::lock_guard<std::mutex> Lock(Mutex);
184+
for (auto ThreadData : ThreadDataList) {
185+
if (!ThreadData->ThreadEntry || ThreadData->NElements == 0)
189186
continue;
190187
if constexpr (has_clearAll<ContainerType>::value) {
191-
ThData->ThEntry->clearAll(f);
188+
ThreadData->ThreadEntry->clearAll(f);
192189
} else if constexpr (has_iterator<ContainerType>::value &&
193190
has_clear<ContainerType>::value) {
194-
for (auto &Obj : *ThData->ThEntry) {
191+
for (auto &Obj : *ThreadData->ThreadEntry) {
195192
if constexpr (is_associative<ContainerType>::value) {
196193
f(Obj.second);
197194
} else {
198195
f(Obj);
199196
}
200197
}
201-
ThData->ThEntry->clear();
198+
ThreadData->ThreadEntry->clear();
202199
} else {
203200
static_assert(true, "Container type not supported");
204201
}
205-
ThData->NElements = 0;
202+
ThreadData->NElements = 0;
206203
}
207204
ThreadDataList.clear();
208205
}
209206

210207
template <class F> llvm::Error deinit(F f) {
211-
std::lock_guard<std::mutex> Lock(Mtx);
212-
for (auto ThData : ThreadDataList) {
213-
if (!ThData->ThEntry || ThData->NElements == 0)
208+
for (auto ThreadData : ThreadDataList) {
209+
if (!ThreadData->ThreadEntry || ThreadData->NElements == 0)
214210
continue;
215-
for (auto &Obj : *ThData->ThEntry) {
211+
for (auto &Obj : *ThreadData->ThreadEntry) {
216212
if constexpr (is_associative<ContainerType>::value) {
217213
if (auto Err = f(Obj.second))
218214
return Err;

0 commit comments

Comments
 (0)