#pragma once #include #include #include #include #include #include #include #include namespace ling3 { class CoreWorkers { public: static CoreWorkers & Instance(); CoreWorkers(const CoreWorkers &) = delete; CoreWorkers & operator=(const CoreWorkers &) = delete; void Run(std::span cores, const std::function & task); private: CoreWorkers(); ~CoreWorkers(); void Worker(int core); std::array workers_; std::array active_ {}; std::array errors_ {}; std::function task_; std::mutex run_mutex_; std::mutex state_mutex_; std::condition_variable start_; std::condition_variable done_; std::size_t generation_ = 0; std::size_t active_count_ = 0; std::size_t completed_ = 0; bool stop_ = false; }; } // namespace ling3