aboutsummaryrefslogtreecommitdiff
path: root/zencore/stats.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'zencore/stats.cpp')
-rw-r--r--zencore/stats.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/zencore/stats.cpp b/zencore/stats.cpp
index 1bb6f6de0..595c45c3f 100644
--- a/zencore/stats.cpp
+++ b/zencore/stats.cpp
@@ -46,7 +46,19 @@ RawEWMA::Tick(double Alpha, uint64_t Interval, uint64_t Count, bool IsInitialUpd
}
else
{
- m_Rate.fetch_add(Alpha * (InstantRate - m_Rate));
+ double Delta = Alpha * (InstantRate - m_Rate);
+
+#if defined(__cpp_lib_atomic_float)
+ m_Rate.fetch_add(Delta);
+#else
+ double Value = m_Rate.load(std::memory_order_acquire);
+ double Next;
+ do
+ {
+ Next = Value + Delta;
+ }
+ while (!m_Rate.compare_exchange_weak(Value, Next, std::memory_order_relaxed));
+#endif
}
}