UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
UniqueLock.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
18template <typename LockType>
19class TUniqueLock final
20{
21public:
22 TUniqueLock(const TUniqueLock&) = delete;
24
25 [[nodiscard]] inline explicit TUniqueLock(LockType& Lock)
26 : Mutex(Lock)
27 {
28 Mutex.Lock();
29 }
30
31 inline ~TUniqueLock()
32 {
33 Mutex.Unlock();
34 }
35
36private:
37 LockType& Mutex;
38};
39
47template <typename LockType>
49{
50public:
51 TDynamicUniqueLock() = default;
52
55
57 [[nodiscard]] inline explicit TDynamicUniqueLock(LockType& Lock)
58 : Mutex(&Lock)
59 {
60 Mutex->Lock();
61 bLocked = true;
62 }
63
65 [[nodiscard]] inline explicit TDynamicUniqueLock(LockType& Lock, FDeferLock)
66 : Mutex(&Lock)
67 {
68 }
69
72 : Mutex(Other.Mutex)
73 , bLocked(Other.bLocked)
74 {
75 Other.Mutex = nullptr;
76 Other.bLocked = false;
77 }
78
81 {
82 if (bLocked)
83 {
84 Mutex->Unlock();
85 }
86 Mutex = Other.Mutex;
87 bLocked = Other.bLocked;
88 Other.Mutex = nullptr;
89 Other.bLocked = false;
90 return *this;
91 }
92
95 {
96 if (bLocked)
97 {
98 Mutex->Unlock();
99 }
100 }
101
103 void Lock()
104 {
105 check(!bLocked);
106 check(Mutex);
107 Mutex->Lock();
108 bLocked = true;
109 }
110
112 void Unlock()
113 {
114 check(bLocked);
115 bLocked = false;
116 Mutex->Unlock();
117 }
118
120 inline bool OwnsLock() const
121 {
122 return bLocked;
123 }
124
126 inline explicit operator bool() const
127 {
128 return OwnsLock();
129 }
130
131private:
132 LockType* Mutex = nullptr;
133 bool bLocked = false;
134};
135
136} // 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 UniqueLock.h:49
TDynamicUniqueLock(TDynamicUniqueLock &&Other)
Definition UniqueLock.h:71
void Lock()
Definition UniqueLock.h:103
TDynamicUniqueLock & operator=(TDynamicUniqueLock &&Other)
Definition UniqueLock.h:80
bool OwnsLock() const
Definition UniqueLock.h:120
TDynamicUniqueLock(const TDynamicUniqueLock &)=delete
TDynamicUniqueLock(LockType &Lock)
Definition UniqueLock.h:57
~TDynamicUniqueLock()
Definition UniqueLock.h:94
TDynamicUniqueLock & operator=(const TDynamicUniqueLock &)=delete
TDynamicUniqueLock(LockType &Lock, FDeferLock)
Definition UniqueLock.h:65
void Unlock()
Definition UniqueLock.h:112
TDynamicUniqueLock()=default
Definition UniqueLock.h:20
TUniqueLock & operator=(const TUniqueLock &)=delete
TUniqueLock(LockType &Lock)
Definition UniqueLock.h:25
TUniqueLock(const TUniqueLock &)=delete
~TUniqueLock()
Definition UniqueLock.h:31
Definition AdvancedWidgetsModule.cpp:13
Definition LockTags.h:12