MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / ThreadProc

Method ThreadProc

Source/Engine/Threading/ThreadPool.cpp:116–145  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

114}
115
116int32 ThreadPool::ThreadProc()
117{
118#ifdef THREAD_POOL_AFFINITY_MASK
119 const int64 index = Platform::InterlockedIncrement(&ThreadPoolImpl::ThreadIndex) - 1;
120 Platform::SetThreadAffinityMask(THREAD_POOL_AFFINITY_MASK((int32)index));
121#endif
122 ThreadPoolTask* task;
123 MONO_THREAD_INFO_TYPE* monoThreadInfo = nullptr;
124
125 // Work until end
126 while (Platform::AtomicRead(&ThreadPoolImpl::ExitFlag) == 0)
127 {
128 // Try to get a job
129 if (ThreadPoolImpl::Jobs.try_dequeue(task))
130 {
131 task->Execute();
132 MONO_THREAD_INFO_GET(monoThreadInfo);
133 }
134 else
135 {
136 MONO_ENTER_GC_SAFE_WITH_INFO(monoThreadInfo);
137 ThreadPoolImpl::JobsMutex.Lock();
138 ThreadPoolImpl::JobsSignal.Wait(ThreadPoolImpl::JobsMutex);
139 ThreadPoolImpl::JobsMutex.Unlock();
140 MONO_EXIT_GC_SAFE_WITH_INFO;
141 }
142 }
143
144 return 0;
145}
146
147#else
148

Callers

nothing calls this directly

Calls 6

LockMethod · 0.80
UnlockMethod · 0.80
InterlockedIncrementFunction · 0.50
AtomicReadFunction · 0.50
ExecuteMethod · 0.45
WaitMethod · 0.45

Tested by

no test coverage detected