// 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; const std::vector *recip; }; 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, const std::vector& recip); }; #endif //JFJOCH_INDEXERTHREADPOOL_H