// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #ifndef JFJOCH_INDEXERTHREADPOOL_H #define JFJOCH_INDEXERTHREADPOOL_H #include #include #include #include #include #include #include #include #include #include #include "../common/JFJochMessages.h" #include "../common/DiffractionSpot.h" #include "../common/DiffractionExperiment.h" #include "../common/NUMAHWPolicy.h" #include "Indexer.h" class IndexerThreadPool { std::atomic failed_start = false; struct TaskPackage { std::shared_ptr>> promise; const DiffractionExperiment* experiment; DataMessage* message; }; std::vector workers; std::mutex m; std::condition_variable cond; std::queue taskQueue; std::latch workers_ready; bool stop; void Worker(int32_t threadIndex, const NUMAHWPolicy &numa_policy, const IndexingSettings& settings); public: IndexerThreadPool(const IndexingSettings& settings, const NUMAHWPolicy &numa_policy = NUMAHWPolicy()); ~IndexerThreadPool(); std::future> Run(const DiffractionExperiment& experiment, DataMessage& message); }; #endif //JFJOCH_INDEXERTHREADPOOL_H