/// <summary> /// Mark the passage of time and decay the current rate accordingly. /// </summary> public void Tick() { var count = _uncounted.GetAndSet(0); var instantRate = count / _interval; if (_initialized.Raise()) { _rate.Set(instantRate); } else { _rate += _alpha * (instantRate - _rate); } }
private static VolatileDouble Add(VolatileDouble left, VolatileDouble right) { left.Set(left.Get() + right.Get()); return(left.Get()); }