12#ifndef vtkSMPThreadPool_h
13#define vtkSMPThreadPool_h
15#include "vtkCommonCoreModule.h"
30VTK_ABI_NAMESPACE_BEGIN
45 struct ProxyThreadData;
59 class VTKCOMMONCORE_EXPORT
Proxy final
84 void DoJob(
std::function<
void()> job);
89 std::vector<
std::reference_wrapper<
std::thread>> GetThreads() const;
94 bool IsTopLevel() const noexcept;
99 Proxy(
std::unique_ptr<ProxyData>&& data);
101 std::unique_ptr<ProxyData> Data;
125 Proxy AllocateThreads(
std::
size_t threadCount = 0);
130 static constexpr
std::
size_t ExternalThreadID = 1;
139 std::
size_t GetThreadId() const noexcept;
144 bool IsParallelScope() const noexcept;
149 bool GetSingleThread() const;
154 std::
size_t ThreadCount() const noexcept;
158 static
void RunJob(ThreadData& data,
std::
size_t jobIndex,
std::unique_lock<
std::mutex>& lock);
160 ThreadData* GetCallerThreadData() const noexcept;
162 std::thread MakeThread();
163 void FillThreadsForNestedProxy(ProxyData* proxy,
std::
size_t maxCount);
164 std::
size_t GetNextThreadId() noexcept;
166 std::atomic<
bool> Initialized{};
167 std::atomic<bool> Joining{};
168 std::vector<std::unique_ptr<ThreadData>> Threads;
169 std::atomic<std::size_t> NextProxyThreadId{ 1 };
Proxy class used to submit work to the thread pool.
Proxy(const Proxy &)=delete
Proxy & operator=(const Proxy &)=delete
Internal thread pool implementation used in SMP functions.
static vtkSMPThreadPool & GetInstance()
Specialization of tuple ranges and iterators for vtkAOSDataArrayTemplate.