10 using namespace Async;
11 using namespace Atomics;
21 virtual void Execute(
size_t id)
noexcept = 0;
31 template <
typename Lambda,
typename ReturnType>
42 if constexpr (std::is_same_v<ReturnType, void>)
52 mPromise->set_exception(std::current_exception());
91 template <
typename T,
typename ...
Args>
92 requires std::is_base_of_v<ThreadPoolJob, T>
98 mTotal.fetch_add(1, std::memory_order_relaxed);
111 return [
func = std::forward<Lambda>(
fn), ...
fargs = std::forward<Args>(
fargs)]
112 {
return func(std::forward<Args>(
fargs)...); };
123 std::forward<PackagedType>(
packaged))),
"Jobs full");
124 mTotal.fetch_add(1, std::memory_order_relaxed);
#define CHECK_MSG(expr, format_str,...)
Definition Logging.hpp:31
State-carrying lambda job for use with ThreadPool.
Definition ThreadPool.hpp:33
SharedPromise< ReturnType > mPromise
Definition ThreadPool.hpp:35
void Execute(size_t) noexcept override
Definition ThreadPool.hpp:38
ThreadPoolLambdaJob(SharedPromise< ReturnType > promise, Lambda &&func)
Definition ThreadPool.hpp:37
Lambda mFunc
Definition ThreadPool.hpp:34
Atomic, lock-free Thread Pool implementation with fixed bounds.
Definition ThreadPool.hpp:64
auto Push(Lambda &&func, Args &&... args)
Push a lambda job to the thread pool.
Definition ThreadPool.hpp:106
Allocator * mAllocator
Definition ThreadPool.hpp:65
void Join()
Wait for all scheduled jobs to complete.
Definition ThreadPool.cpp:18
JobQueue mJobs
Definition ThreadPool.hpp:71
~ThreadPool()
Definition ThreadPool.cpp:27
void PushImpl(Args &&... args)
Push a job implementing ThreadPoolJob to the thread pool.
Definition ThreadPool.hpp:93
JobQueue::Writer mJobsWriter
Definition ThreadPool.hpp:72
Vector< Thread > mThreads
Definition ThreadPool.hpp:74
Atomic< size_t > mComplete
Definition ThreadPool.hpp:68
Atomic< bool > mShutdown
Definition ThreadPool.hpp:67
Atomic< size_t > mTotal
Definition ThreadPool.hpp:69
void Shutdown()
Shutdown the ThreadPool, potentially cancelling all pending jobs.
Definition ThreadPool.cpp:12
String mName
Definition ThreadPool.hpp:66
void ThreadPoolWorker(size_t id)
Definition ThreadPool.cpp:31
General Purpose Allocator (GPA) interface.
Definition Allocator.hpp:24
Asynchronous programming primitives.
Definition Future.hpp:8
std::basic_string< char > String
Alias for std::basic_string<char>, without an explicit allocator constructor.
Definition Container.hpp:141
std::basic_string_view< char > StringView
Alias for std::basic_string_view<char>
Definition Container.hpp:53
std::unique_ptr< T, StlDeleter< T > > UniquePtr
std::unique_ptr with custom deleter that uses a Foundation::Core::Allocator to deallocate memory.
Definition Allocator.hpp:161
Job interface for use with ThreadPool.
Definition ThreadPool.hpp:19
virtual ~ThreadPoolJob()=default
virtual void Execute(size_t id) noexcept=0