strengthened memory order for metadata manipulation

This commit is contained in:
joaquintides
2023-12-11 18:54:10 +01:00
parent 901d652fd7
commit b087f9fb53

View File

@ -205,6 +205,17 @@ private:
template<typename 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);}
void operator=(Integral m){n.store(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);
return *this;
}
#endif
std::atomic<Integral> n;
};