public static double Add(ref double location1, double value) { double newCurrentValue = 0; while (true) { double currentValue = newCurrentValue; double newValue = currentValue + value; newCurrentValue = Interlocked.CompareExchange(ref location1, newValue, currentValue); if (newCurrentValue == currentValue) return newValue; } }