yacreader/common/release_acquire_atomic.h
Luis Ángel San Martín 5f0889f332 Format
2020-08-31 16:19:42 +02:00

29 lines
532 B
C++

#ifndef RELEASE_ACQUIRE_ATOMIC_H
#define RELEASE_ACQUIRE_ATOMIC_H
#include <atomic>
template<typename T>
class ReleaseAcquireAtomic
{
public:
constexpr ReleaseAcquireAtomic(T desired) noexcept
: value(desired) { }
T operator=(T desired) noexcept
{
value.store(desired, std::memory_order_release);
return desired;
}
operator T() const noexcept
{
return value.load(std::memory_order_acquire);
}
private:
std::atomic<T> value;
};
#endif // RELEASE_ACQUIRE_ATOMIC_H