mirror of
https://github.com/boostorg/unordered.git
synced 2025-07-30 19:37:14 +02:00
strengthened memory order for metadata manipulation
This commit is contained in:
@ -205,6 +205,17 @@ private:
|
|||||||
template<typename Integral>
|
template<typename Integral>
|
||||||
struct atomic_integral
|
struct atomic_integral
|
||||||
{
|
{
|
||||||
|
#if defined(BOOST_UNORDERED_LATCH_FREE)
|
||||||
|
operator Integral()const{return n.load();}
|
||||||
|
void operator=(Integral m){n.store(m);}
|
||||||
|
void operator|=(Integral m){n.fetch_or(m);}
|
||||||
|
void operator&=(Integral m){n.fetch_and(m);}
|
||||||
|
|
||||||
|
atomic_integral& operator=(atomic_integral const& rhs) {
|
||||||
|
n.store(rhs.n.load());
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
#else
|
||||||
operator Integral()const{return n.load(std::memory_order_relaxed);}
|
operator Integral()const{return n.load(std::memory_order_relaxed);}
|
||||||
void operator=(Integral m){n.store(m,std::memory_order_relaxed);}
|
void operator=(Integral m){n.store(m,std::memory_order_relaxed);}
|
||||||
void operator|=(Integral m){n.fetch_or(m,std::memory_order_relaxed);}
|
void operator|=(Integral m){n.fetch_or(m,std::memory_order_relaxed);}
|
||||||
@ -214,6 +225,7 @@ struct atomic_integral
|
|||||||
n.store(rhs.n.load(std::memory_order_relaxed),std::memory_order_relaxed);
|
n.store(rhs.n.load(std::memory_order_relaxed),std::memory_order_relaxed);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
std::atomic<Integral> n;
|
std::atomic<Integral> n;
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user