Skip to content

Commit ba8a445

Browse files
committed
Prefer std::atomic over MemoryBarrier
1 parent 3080a45 commit ba8a445

File tree

1 file changed

+25
-22
lines changed

1 file changed

+25
-22
lines changed

port/atomic_pointer.h

+25-22
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,30 @@
4646
namespace leveldb {
4747
namespace port {
4848

49+
// AtomicPointer based on <cstdatomic> if available
50+
#if defined(LEVELDB_ATOMIC_PRESENT)
51+
class AtomicPointer {
52+
private:
53+
std::atomic<void*> rep_;
54+
public:
55+
AtomicPointer() { }
56+
explicit AtomicPointer(void* v) : rep_(v) { }
57+
inline void* Acquire_Load() const {
58+
return rep_.load(std::memory_order_acquire);
59+
}
60+
inline void Release_Store(void* v) {
61+
rep_.store(v, std::memory_order_release);
62+
}
63+
inline void* NoBarrier_Load() const {
64+
return rep_.load(std::memory_order_relaxed);
65+
}
66+
inline void NoBarrier_Store(void* v) {
67+
rep_.store(v, std::memory_order_relaxed);
68+
}
69+
};
70+
71+
#else
72+
4973
// Define MemoryBarrier() if available
5074
// Windows on x86
5175
#if defined(OS_WIN) && defined(COMPILER_MSVC) && defined(ARCH_CPU_X86_FAMILY)
@@ -142,28 +166,6 @@ class AtomicPointer {
142166
}
143167
};
144168

145-
// AtomicPointer based on <cstdatomic>
146-
#elif defined(LEVELDB_ATOMIC_PRESENT)
147-
class AtomicPointer {
148-
private:
149-
std::atomic<void*> rep_;
150-
public:
151-
AtomicPointer() { }
152-
explicit AtomicPointer(void* v) : rep_(v) { }
153-
inline void* Acquire_Load() const {
154-
return rep_.load(std::memory_order_acquire);
155-
}
156-
inline void Release_Store(void* v) {
157-
rep_.store(v, std::memory_order_release);
158-
}
159-
inline void* NoBarrier_Load() const {
160-
return rep_.load(std::memory_order_relaxed);
161-
}
162-
inline void NoBarrier_Store(void* v) {
163-
rep_.store(v, std::memory_order_relaxed);
164-
}
165-
};
166-
167169
// Atomic pointer based on sparc memory barriers
168170
#elif defined(__sparcv9) && defined(__GNUC__)
169171
class AtomicPointer {
@@ -228,6 +230,7 @@ class AtomicPointer {
228230
#else
229231
#error Please implement AtomicPointer for this platform.
230232

233+
#endif
231234
#endif
232235

233236
#undef LEVELDB_HAVE_MEMORY_BARRIER

0 commit comments

Comments
 (0)