31 return State.compare_exchange_strong(Expected, IsLockedFlag, std::memory_order_acquire, std::memory_order_relaxed);
37 if (
LIKELY(State.compare_exchange_weak(Expected, IsLockedFlag, std::memory_order_acquire, std::memory_order_relaxed)))
48 UPTRINT CurrentState = State.fetch_sub(IsLockedFlag, std::memory_order_release);
52 const bool bQueueEmpty = !(CurrentState & QueueMask);
54 const bool bQueueLocked = (CurrentState & IsQueueLockedFlag);
61 UnlockSlow(CurrentState);
68 static constexpr UPTRINT IsLockedFlag = 1 << 0;
69 static constexpr UPTRINT IsQueueLockedFlag = 1 << 1;
70 static constexpr UPTRINT QueueMask = ~(IsLockedFlag | IsQueueLockedFlag);
72 std::atomic<UPTRINT> State = 0;
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define LIKELY(x)
Definition CityHash.cpp:107
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UE_API
Definition SColorGradingComponentViewer.h:12
Definition WordMutex.h:21
FWordMutex(const FWordMutex &)=delete
bool TryLock()
Definition WordMutex.h:28
FWordMutex & operator=(const FWordMutex &)=delete
void Unlock()
Definition WordMutex.h:45
constexpr FWordMutex()=default
void Lock()
Definition WordMutex.h:34
Definition AdvancedWidgetsModule.cpp:13