UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MultiUniqueLock.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Algo/Sort.h"
6#include "Containers/Array.h"
7
8namespace UE
9{
10
11// Like TUniqueLock, but acquires multiple locks and holds then until destruction. Acquires the locks in address
12// order to prevent deadlocks if multiple threads are using TMultiUniqueLock for similar sets of locks.
13template<typename TLockType>
15{
16public:
17 explicit TMultiUniqueLock(const TArray<TLockType*>& Locks)
18 : Locks(Locks)
19 {
20 SortAndLock();
21 }
22
24 : Locks(MoveTemp(Locks))
25 {
26 SortAndLock();
27 }
28
31
33 {
34 for (TLockType* Lock : Locks)
35 {
36 Lock->Unlock();
37 }
38 }
39
40private:
41 void SortAndLock()
42 {
43 Algo::Sort(Locks);
44 for (TLockType* Lock : Locks)
45 {
46 Lock->Lock();
47 }
48 }
49
51};
52
53}
54
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
Definition Array.h:670
Definition MultiUniqueLock.h:15
TMultiUniqueLock & operator=(const TArray< TLockType * > &)=delete
TMultiUniqueLock(TArray< TLockType * > &&Locks)
Definition MultiUniqueLock.h:23
~TMultiUniqueLock()
Definition MultiUniqueLock.h:32
TMultiUniqueLock(const TArray< TLockType * > &Locks)
Definition MultiUniqueLock.h:17
TMultiUniqueLock & operator=(TArray< TLockType * > &&)=delete
UE_REWRITE void Sort(RangeType &&Range)
Definition Sort.h:16
Definition AdvancedWidgetsModule.cpp:13