diff --git a/Redcraft.Utility/Source/Public/Templates/Atomic.h b/Redcraft.Utility/Source/Public/Templates/Atomic.h index 7a833bc..85384cb 100644 --- a/Redcraft.Utility/Source/Public/Templates/Atomic.h +++ b/Redcraft.Utility/Source/Public/Templates/Atomic.h @@ -151,7 +151,8 @@ public: FORCEINLINE ValueType FetchFn(F&& Func, EMemoryOrder Order = EMemoryOrder::SequentiallyConsistent) { ValueType Temp(Load(EMemoryOrder::Relaxed)); - while (!CompareExchange(Temp, InvokeResult(Forward(Func), Temp), Order)); + // We do a weak read here because we require a loop. + while (!CompareExchange(Temp, InvokeResult(Forward(Func), Temp), Order, true)); return Temp; } @@ -160,7 +161,8 @@ public: FORCEINLINE ValueType FetchFn(F&& Func, EMemoryOrder Order = EMemoryOrder::SequentiallyConsistent) volatile { ValueType Temp(Load(EMemoryOrder::Relaxed)); - while (!CompareExchange(Temp, InvokeResult(Forward(Func), Temp), Order)); + // We do a weak read here because we require a loop. + while (!CompareExchange(Temp, InvokeResult(Forward(Func), Temp), Order, true)); return Temp; }