UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
RecursiveMutex.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
6#include <atomic>
7
8#define UE_API CORE_API
9
10namespace UE
11{
12
18class FRecursiveMutex final
19{
20public:
21 constexpr FRecursiveMutex() = default;
22
25
26 [[nodiscard]] inline bool IsLocked() const
27 {
28 return !!(State.load(std::memory_order_relaxed) & LockCountMask);
29 }
30
31 [[nodiscard]] UE_API bool TryLock();
32 UE_API void Lock();
33 UE_API void Unlock();
34
35private:
36 void LockSlow(uint32 CurrentState, uint32 CurrentThreadId);
37 void WakeWaitingThread();
38
39 static constexpr uint32 MayHaveWaitingLockFlag = 1 << 0;
40 static constexpr uint32 LockCountShift = 1;
41 static constexpr uint32 LockCountMask = 0xffff'fffe;
42
43 std::atomic<uint32> State = 0;
44 std::atomic<uint32> ThreadId = 0;
45};
46
47} // UE
48
49#undef UE_API
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UE_API
Definition SColorGradingComponentViewer.h:12
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition RecursiveMutex.h:19
bool IsLocked() const
Definition RecursiveMutex.h:26
UE_API void Lock()
Definition RecursiveMutex.cpp:40
FRecursiveMutex(const FRecursiveMutex &)=delete
UE_API bool TryLock()
Definition RecursiveMutex.cpp:13
UE_API void Unlock()
Definition RecursiveMutex.cpp:115
constexpr FRecursiveMutex()=default
FRecursiveMutex & operator=(const FRecursiveMutex &)=delete
Definition AdvancedWidgetsModule.cpp:13