Skip to content

Commit d3638ac

Browse files
Use thread_local instead of boost::thread_specific_ptr (#6991)
1 parent c2f877e commit d3638ac

File tree

3 files changed

+41
-38
lines changed

3 files changed

+41
-38
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
- NodeJS:
2525
- CHANGED: Use node-api instead of NAN. [#6452](https://github.com/Project-OSRM/osrm-backend/pull/6452)
2626
- Misc:
27+
- CHANGED: Use thread_local instead of boost::thread_specific_ptr. [#6991](https://github.com/Project-OSRM/osrm-backend/pull/6991)
2728
- CHANGED: Bump flatbuffers to v24.3.25 version. [#6988](https://github.com/Project-OSRM/osrm-backend/pull/6988)
2829
- CHANGED: Add .reserve(...) to assembleGeometry function. [#6983](https://github.com/Project-OSRM/osrm-backend/pull/6983)
2930
- CHANGED: Get rid of boost::optional leftovers. [#6977](https://github.com/Project-OSRM/osrm-backend/pull/6977)

include/engine/search_engine_data.hpp

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
#include "util/query_heap.hpp"
66
#include "util/typedefs.hpp"
77

8-
#include <boost/thread/tss.hpp>
9-
108
namespace osrm::engine
119
{
1210

@@ -45,19 +43,19 @@ template <> struct SearchEngineData<routing_algorithms::ch::Algorithm>
4543
ManyToManyHeapData,
4644
util::UnorderedMapStorage<NodeID, int>>;
4745

48-
using SearchEngineHeapPtr = boost::thread_specific_ptr<QueryHeap>;
46+
using SearchEngineHeapPtr = std::unique_ptr<QueryHeap>;
4947

50-
using ManyToManyHeapPtr = boost::thread_specific_ptr<ManyToManyQueryHeap>;
48+
using ManyToManyHeapPtr = std::unique_ptr<ManyToManyQueryHeap>;
5149

52-
static SearchEngineHeapPtr forward_heap_1;
53-
static SearchEngineHeapPtr reverse_heap_1;
54-
static SearchEngineHeapPtr forward_heap_2;
55-
static SearchEngineHeapPtr reverse_heap_2;
56-
static SearchEngineHeapPtr forward_heap_3;
57-
static SearchEngineHeapPtr reverse_heap_3;
58-
static ManyToManyHeapPtr many_to_many_heap;
59-
static SearchEngineHeapPtr map_matching_forward_heap_1;
60-
static SearchEngineHeapPtr map_matching_reverse_heap_1;
50+
static thread_local SearchEngineHeapPtr forward_heap_1;
51+
static thread_local SearchEngineHeapPtr reverse_heap_1;
52+
static thread_local SearchEngineHeapPtr forward_heap_2;
53+
static thread_local SearchEngineHeapPtr reverse_heap_2;
54+
static thread_local SearchEngineHeapPtr forward_heap_3;
55+
static thread_local SearchEngineHeapPtr reverse_heap_3;
56+
static thread_local ManyToManyHeapPtr many_to_many_heap;
57+
static thread_local SearchEngineHeapPtr map_matching_forward_heap_1;
58+
static thread_local SearchEngineHeapPtr map_matching_reverse_heap_1;
6159

6260
void InitializeOrClearMapMatchingThreadLocalStorage(unsigned number_of_nodes);
6361

@@ -127,16 +125,16 @@ template <> struct SearchEngineData<routing_algorithms::mld::Algorithm>
127125
MapMatchingMultiLayerDijkstraHeapData,
128126
util::TwoLevelStorage<NodeID, int>>;
129127

130-
using SearchEngineHeapPtr = boost::thread_specific_ptr<QueryHeap>;
131-
using ManyToManyHeapPtr = boost::thread_specific_ptr<ManyToManyQueryHeap>;
132-
using MapMatchingHeapPtr = boost::thread_specific_ptr<MapMatchingQueryHeap>;
128+
using SearchEngineHeapPtr = std::unique_ptr<QueryHeap>;
129+
using ManyToManyHeapPtr = std::unique_ptr<ManyToManyQueryHeap>;
130+
using MapMatchingHeapPtr = std::unique_ptr<MapMatchingQueryHeap>;
133131

134-
static SearchEngineHeapPtr forward_heap_1;
135-
static SearchEngineHeapPtr reverse_heap_1;
136-
static MapMatchingHeapPtr map_matching_forward_heap_1;
137-
static MapMatchingHeapPtr map_matching_reverse_heap_1;
132+
static thread_local SearchEngineHeapPtr forward_heap_1;
133+
static thread_local SearchEngineHeapPtr reverse_heap_1;
134+
static thread_local MapMatchingHeapPtr map_matching_forward_heap_1;
135+
static thread_local MapMatchingHeapPtr map_matching_reverse_heap_1;
138136

139-
static ManyToManyHeapPtr many_to_many_heap;
137+
static thread_local ManyToManyHeapPtr many_to_many_heap;
140138

141139
void InitializeOrClearFirstThreadLocalStorage(unsigned number_of_nodes,
142140
unsigned number_of_boundary_nodes);
@@ -148,4 +146,4 @@ template <> struct SearchEngineData<routing_algorithms::mld::Algorithm>
148146
};
149147
} // namespace osrm::engine
150148

151-
#endif // SEARCH_ENGINE_DATA_HPP
149+
#endif // SEARCH_ENGINE_DATA_HPP

src/engine/search_engine_data.cpp

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,18 @@ namespace osrm::engine
55

66
// CH heaps
77
using CH = routing_algorithms::ch::Algorithm;
8-
SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::forward_heap_1;
9-
SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::reverse_heap_1;
10-
SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::forward_heap_2;
11-
SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::reverse_heap_2;
12-
SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::forward_heap_3;
13-
SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::reverse_heap_3;
14-
SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::map_matching_forward_heap_1;
15-
SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::map_matching_reverse_heap_1;
16-
17-
SearchEngineData<CH>::ManyToManyHeapPtr SearchEngineData<CH>::many_to_many_heap;
8+
thread_local SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::forward_heap_1;
9+
thread_local SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::reverse_heap_1;
10+
thread_local SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::forward_heap_2;
11+
thread_local SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::reverse_heap_2;
12+
thread_local SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::forward_heap_3;
13+
thread_local SearchEngineData<CH>::SearchEngineHeapPtr SearchEngineData<CH>::reverse_heap_3;
14+
thread_local SearchEngineData<CH>::SearchEngineHeapPtr
15+
SearchEngineData<CH>::map_matching_forward_heap_1;
16+
thread_local SearchEngineData<CH>::SearchEngineHeapPtr
17+
SearchEngineData<CH>::map_matching_reverse_heap_1;
18+
19+
thread_local SearchEngineData<CH>::ManyToManyHeapPtr SearchEngineData<CH>::many_to_many_heap;
1820

1921
void SearchEngineData<CH>::InitializeOrClearMapMatchingThreadLocalStorage(unsigned number_of_nodes)
2022
{
@@ -114,11 +116,13 @@ void SearchEngineData<CH>::InitializeOrClearManyToManyThreadLocalStorage(unsigne
114116

115117
// MLD
116118
using MLD = routing_algorithms::mld::Algorithm;
117-
SearchEngineData<MLD>::SearchEngineHeapPtr SearchEngineData<MLD>::forward_heap_1;
118-
SearchEngineData<MLD>::SearchEngineHeapPtr SearchEngineData<MLD>::reverse_heap_1;
119-
SearchEngineData<MLD>::MapMatchingHeapPtr SearchEngineData<MLD>::map_matching_forward_heap_1;
120-
SearchEngineData<MLD>::MapMatchingHeapPtr SearchEngineData<MLD>::map_matching_reverse_heap_1;
121-
SearchEngineData<MLD>::ManyToManyHeapPtr SearchEngineData<MLD>::many_to_many_heap;
119+
thread_local SearchEngineData<MLD>::SearchEngineHeapPtr SearchEngineData<MLD>::forward_heap_1;
120+
thread_local SearchEngineData<MLD>::SearchEngineHeapPtr SearchEngineData<MLD>::reverse_heap_1;
121+
thread_local SearchEngineData<MLD>::MapMatchingHeapPtr
122+
SearchEngineData<MLD>::map_matching_forward_heap_1;
123+
thread_local SearchEngineData<MLD>::MapMatchingHeapPtr
124+
SearchEngineData<MLD>::map_matching_reverse_heap_1;
125+
thread_local SearchEngineData<MLD>::ManyToManyHeapPtr SearchEngineData<MLD>::many_to_many_heap;
122126

123127
void SearchEngineData<MLD>::InitializeOrClearMapMatchingThreadLocalStorage(
124128
unsigned number_of_nodes, unsigned number_of_boundary_nodes)
@@ -178,4 +182,4 @@ void SearchEngineData<MLD>::InitializeOrClearManyToManyThreadLocalStorage(
178182
many_to_many_heap.reset(new ManyToManyQueryHeap(number_of_nodes, number_of_boundary_nodes));
179183
}
180184
}
181-
} // namespace osrm::engine
185+
} // namespace osrm::engine

0 commit comments

Comments
 (0)