With the new standards ofc++17 I wonder if there is a good way to start a process with a fixed number of threads until a batch of jobs are finished.
Can you tell me how I can achieve the desired functionality of this code:
std::vector<std::future<std::string>> futureStore; const int batchSize = 1000; const int maxNumParallelThreads = 10; int threadsTerminated = 0; while(threadsTerminated < batchSize) { const int& threadsRunning = futureStore.size(); while(threadsRunning < maxNumParallelThreads) { futureStore.emplace_back(std::async(someFunction)); } for(std::future<std::string>& readyFuture: std::when_any(futureStore.begin(), futureStore.end())) { auto retVal = readyFuture.get(); // (possibly do something with the ret val) threadsTerminated++; } } I read, that there used to be an std::when_any function, but it was a feature that did make it getting into the std features.
Is there any support for this functionality (not necessarily for std::future-s) in the current standard libraries? Is there a way to easily implement it, or do I have to resolve to something like this?