RavEngine
Loading...
Searching...
No Matches
Atomic.hpp
1
#pragma once
2
#include "SpinLock.hpp"
3
4
template
<
typename
T,
typename
lock_t = RavEngine::SpinLock>
5
class
LockFreeAtomic
{
6
T value;
7
mutable
lock_t mtx;
8
public
:
9
10
// default
11
LockFreeAtomic
() {}
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
};
LockFreeAtomic
Definition
Atomic.hpp:5
RavEngine
include
RavEngine
Atomic.hpp
Generated by
1.9.8