UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SharedLock.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Async/LockTags.h"
7
8namespace UE
9{
10
11// Note: FSharedRecursiveMutex has specialized these lock types.
12
20template <typename LockType>
21class TSharedLock final
22{
23public:
24 TSharedLock(const TSharedLock&) = delete;
26
27 [[nodiscard]] inline explicit TSharedLock(LockType& Lock)
28 : Mutex(Lock)
29 {
30 Mutex.LockShared();
31 }
32
33 inline ~TSharedLock()
34 {
35 Mutex.UnlockShared();
36 }
37
38private:
39 LockType& Mutex;
40};
41
49template <typename LockType>
51{
52public:
53 TDynamicSharedLock() = default;
54
57
59 [[nodiscard]] inline explicit TDynamicSharedLock(LockType& Lock)
60 : Mutex(&Lock)
61 {
62 Mutex->LockShared();
63 bLocked = true;
64 }
65
67 [[nodiscard]] inline explicit TDynamicSharedLock(LockType& Lock, FDeferLock)
68 : Mutex(&Lock)
69 {
70 }
71
74 : Mutex(Other.Mutex)
75 , bLocked(Other.bLocked)
76 {
77 Other.Mutex = nullptr;
78 Other.bLocked = false;
79 }
80
83 {
84 if (bLocked)
85 {
86 Mutex->UnlockShared();
87 }
88 Mutex = Other.Mutex;
89 bLocked = Other.bLocked;
90 Other.Mutex = nullptr;
91 Other.bLocked = false;
92 return *this;
93 }
94
97 {
98 if (bLocked)
99 {
100 Mutex->UnlockShared();
101 }
102 }
103
105 bool TryLock()
106 {
107 check(!bLocked);
108 check(Mutex);
109 bLocked = Mutex->TryLockShared();
110 return bLocked;
111 }
112
114 void Lock()
115 {
116 check(!bLocked);
117 check(Mutex);
118 Mutex->LockShared();
119 bLocked = true;
120 }
121
123 void Unlock()
124 {
125 check(bLocked);
126 bLocked = false;
127 Mutex->UnlockShared();
128 }
129
131 inline bool OwnsLock() const
132 {
133 return bLocked;
134 }
135
137 inline explicit operator bool() const
138 {
139 return OwnsLock();
140 }
141
142private:
143 LockType* Mutex = nullptr;
144 bool bLocked = false;
145};
146
147} // UE
#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
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
Definition SharedLock.h:51
TDynamicSharedLock()=default
TDynamicSharedLock & operator=(const TDynamicSharedLock &)=delete
TDynamicSharedLock(TDynamicSharedLock &&Other)
Definition SharedLock.h:73
bool TryLock()
Definition SharedLock.h:105
TDynamicSharedLock(const TDynamicSharedLock &)=delete
bool OwnsLock() const
Definition SharedLock.h:131
TDynamicSharedLock(LockType &Lock, FDeferLock)
Definition SharedLock.h:67
TDynamicSharedLock(LockType &Lock)
Definition SharedLock.h:59
void Unlock()
Definition SharedLock.h:123
TDynamicSharedLock & operator=(TDynamicSharedLock &&Other)
Definition SharedLock.h:82
~TDynamicSharedLock()
Definition SharedLock.h:96
void Lock()
Definition SharedLock.h:114
Definition SharedLock.h:22
~TSharedLock()
Definition SharedLock.h:33
TSharedLock(const TSharedLock &)=delete
TSharedLock & operator=(const TSharedLock &)=delete
TSharedLock(LockType &Lock)
Definition SharedLock.h:27
Definition AdvancedWidgetsModule.cpp:13
Definition LockTags.h:12