RavEngine
Loading...
Searching...
No Matches
Atomic.hpp
1#pragma once
2#include "SpinLock.hpp"
3
4template<typename T, typename lock_t = RavEngine::SpinLock>
6 T value;
7 mutable lock_t mtx;
8public:
9
10 // default
12
13 // from value
14 LockFreeAtomic(const T& value) : value(value) {}
15
16 //copy assignment
17 constexpr inline LockFreeAtomic& operator=(const LockFreeAtomic<T>& other) {
18 if (&other == this) {
19 return *this;
20 }
21
22 store(other.value);
23
24 return *this;
25 }
26
27 //conversion operator
28 constexpr inline operator T () const{
29 return load();
30 }
31
32 constexpr inline T load() const{
33 T temp;
34 mtx.lock();
35 temp = value;
36 mtx.unlock();
37 return temp;
38 }
39
40 constexpr inline void store(const T& newvalue) {
41 mtx.lock();
42 value = newvalue;
43 mtx.unlock();
44 }
45};
Definition Atomic.hpp:5