diff options
Diffstat (limited to 'zencore/stats.cpp')
| -rw-r--r-- | zencore/stats.cpp | 14 |
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 } } |