11#include <AtomicQueue.h>
15 namespace TaskConcurrencyLimiter_Private
22 : FreeSlots(MaxConcurrency)
26 FreeSlots.push(
Index);
32 if (FreeSlots.try_pop(Slot))
43 FreeSlots.push(Slot + IndexOffset);
49 static constexpr int32 IndexOffset = 1;
50 atomic_queue::AtomicQueueB<uint32> FreeSlots;
65 template<
typename TaskFunctionType>
66 void Push(
const TCHAR* DebugName, TaskFunctionType&& TaskFunction)
74 TaskFunction =
MoveTemp(TaskFunction),
90 AddWorkItem(
Task.Get());
103 ETaskPriority TaskPriority;
105 std::atomic<uint32> NumWorkItems { 0 };
106 std::atomic<FEvent*> CompletionEvent {
nullptr };
126 : Pimpl(
MakeShared<TaskConcurrencyLimiter_Private::FPimpl>(MaxConcurrency, TaskPriority))
139 template<
typename TaskFunctionType>
140 void Push(
const TCHAR* DebugName, TaskFunctionType&& TaskFunction)
142 Pimpl->Push(DebugName,
MoveTemp(TaskFunction));
TSharedRef< InObjectType, InMode > MakeShared(InArgTypes &&... Args)
Definition SharedPointer.h:2009
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
Definition LockFreeList.h:910
Definition SharedPointer.h:1640
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition TaskConcurrencyLimiter.h:117
FTaskConcurrencyLimiter(uint32 MaxConcurrency, ETaskPriority TaskPriority=ETaskPriority::Default)
Definition TaskConcurrencyLimiter.h:125
bool Wait(FTimespan Timeout=FTimespan::MaxValue())
Definition TaskConcurrencyLimiter.h:155
void Push(const TCHAR *DebugName, TaskFunctionType &&TaskFunction)
Definition TaskConcurrencyLimiter.h:140
Definition TaskConcurrencyLimiter.h:19
bool Alloc(uint32 &Slot)
Definition TaskConcurrencyLimiter.h:30
void Release(uint32 Slot)
Definition TaskConcurrencyLimiter.h:41
FConcurrencySlots(uint32 MaxConcurrency)
Definition TaskConcurrencyLimiter.h:21
Definition TaskConcurrencyLimiter.h:55
bool CORE_API Wait(FTimespan Timeout)
Definition TaskConcurrencyLimiter.cpp:35
void Push(const TCHAR *DebugName, TaskFunctionType &&TaskFunction)
Definition TaskConcurrencyLimiter.h:66
FPimpl(uint32 InMaxConcurrency, ETaskPriority InTaskPriority)
Definition TaskConcurrencyLimiter.h:57
CORE_API ~FPimpl()
Definition TaskConcurrencyLimiter.cpp:14
Definition AnalyticsProviderLog.h:8
U16 Index
Definition radfft.cpp:71
static FTimespan MaxValue()
Definition Timespan.h:686