11namespace UE {
class FSharedRecursiveMutex; }
49 return !!(State.load(std::memory_order_relaxed) & LockCountMask);
58 return !!(State.load(std::memory_order_relaxed) & SharedLockCountMask);
67 void LockSlow(
uint32 CurrentState,
uint32 CurrentThreadId);
69 void WakeWaitingThreads(
uint32 CurrentState);
71 const void* GetLockAddress()
const;
72 const void* GetSharedLockAddress()
const;
74 static constexpr uint32 MayHaveWaitingLockFlag = 1 << 0;
75 static constexpr uint32 MayHaveWaitingSharedLockFlag = 1 << 1;
76 static constexpr uint32 LockCountShift = 2;
77 static constexpr uint32 LockCountMask = 0x0000'0ffc;
78 static constexpr uint32 SharedLockCountShift = 12;
79 static constexpr uint32 SharedLockCountMask = 0xffff'f000;
81 std::atomic<uint32> State = 0;
82 std::atomic<uint32> ThreadId = 0;
95 Mutex.LockShared(
Link);
100 Mutex.UnlockShared(
Link);
120 Mutex->LockShared(
Link);
131 , bLocked(
Other.bLocked)
135 Mutex->LockShared(
Link);
136 Mutex->UnlockShared(
Other.Link);
138 Other.Mutex =
nullptr;
139 Other.bLocked =
false;
146 Mutex->UnlockShared(
Link);
149 bLocked =
Other.bLocked;
152 Mutex->LockShared(
Link);
153 Mutex->UnlockShared(
Other.Link);
155 Other.Mutex =
nullptr;
156 Other.bLocked =
false;
164 Mutex->UnlockShared(
Link);
172 bLocked = Mutex->TryLockShared(
Link);
180 Mutex->LockShared(
Link);
188 Mutex->UnlockShared(
Link);
196 inline explicit operator bool()
const
204 bool bLocked =
false;
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
const bool
Definition NetworkReplayStreaming.h:178
#define UE_API
Definition SColorGradingComponentViewer.h:12
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
Definition SharedRecursiveMutex.h:40
UE_API bool TryLockShared(Core::Private::FSharedRecursiveMutexLink &Link)
Definition SharedRecursiveMutex.cpp:214
UE_API void LockShared(Core::Private::FSharedRecursiveMutexLink &Link)
Definition SharedRecursiveMutex.cpp:241
FSharedRecursiveMutex & operator=(const FSharedRecursiveMutex &)=delete
constexpr FSharedRecursiveMutex()=default
FSharedRecursiveMutex(const FSharedRecursiveMutex &)=delete
UE_API void UnlockShared(Core::Private::FSharedRecursiveMutexLink &Link)
Definition SharedRecursiveMutex.cpp:315
bool IsLockShared() const
Definition SharedRecursiveMutex.h:56
bool IsLocked() const
Definition SharedRecursiveMutex.h:47
UE_API void Lock()
Definition SharedRecursiveMutex.cpp:108
UE_API void Unlock()
Definition SharedRecursiveMutex.cpp:187
UE_API bool TryLock()
Definition SharedRecursiveMutex.cpp:80
TDynamicSharedLock & operator=(TDynamicSharedLock &&Other)
Definition SharedRecursiveMutex.h:142
bool TryLock()
Definition SharedRecursiveMutex.h:168
TDynamicSharedLock(FSharedRecursiveMutex &Lock, FDeferLock)
Definition SharedRecursiveMutex.h:124
bool OwnsLock() const
Definition SharedRecursiveMutex.h:191
void Unlock()
Definition SharedRecursiveMutex.h:184
TDynamicSharedLock(FSharedRecursiveMutex &Lock)
Definition SharedRecursiveMutex.h:117
TDynamicSharedLock()=default
void Lock()
Definition SharedRecursiveMutex.h:176
TDynamicSharedLock(TDynamicSharedLock &&Other)
Definition SharedRecursiveMutex.h:129
TDynamicSharedLock(const TDynamicSharedLock &)=delete
TDynamicSharedLock & operator=(const TDynamicSharedLock &)=delete
~TDynamicSharedLock()
Definition SharedRecursiveMutex.h:160
Definition SharedLock.h:51
bool OwnsLock() const
Definition SharedLock.h:131
void Lock()
Definition SharedLock.h:114
TSharedLock(const TSharedLock &)=delete
~TSharedLock()
Definition SharedRecursiveMutex.h:98
TSharedLock(FSharedRecursiveMutex &Lock)
Definition SharedRecursiveMutex.h:92
TSharedLock & operator=(const TSharedLock &)=delete
Definition SharedLock.h:22
implementation
Definition PlayInEditorLoadingScope.h:8
Definition AdvancedWidgetsModule.cpp:13
Definition SharedRecursiveMutex.h:17
void Push(const FSharedRecursiveMutex *Mutex)
Definition SharedRecursiveMutex.cpp:40
void Pop()
Definition SharedRecursiveMutex.cpp:48
FSharedRecursiveMutexLink * Next
Definition SharedRecursiveMutex.h:23
const FSharedRecursiveMutex * OwnedMutex
Definition SharedRecursiveMutex.h:22
static bool Owns(const FSharedRecursiveMutex *Mutex)
Definition SharedRecursiveMutex.cpp:28