У меня есть функция, которая выполняет потенциально очень медленные вычисления (см. Ниже пример базового c). Функция не записывает в существующие ресурсы, не имеет побочных эффектов и использует только автоматическое выделение c для всех своих переменных (поэтому new
и delete
никогда не вызываются вне каких-либо вызовов в стандартной библиотеке).
Возможно ли отключить функцию по истечении определенного времени и освободить запрошенную память кучи, без изменения самой функции?
//Returns all primes up to n (fairly bad implementation; the idea is that it runs too long)
std::vector<int> primes(int n) {
std::vector<int> list={2};
for (int i = 3; i <= n; i++) {
bool flag= 0;
for (const auto& j : list) {
if (i % j == 0) {
flag= 1;
break;
}
}
if (!flag)
list.push_back(i);
}
return list;
}
И main
выглядит следующим образом:
int main(){
std::vector<std::vector<int>> list_of_lists(6);
#pragma omp parallel for num_threads(6)
for (int n = 1; n < 7; n++) {
//I want the assignment below to make list_of_lists[n-1] empty if it takes more than 5 secs
list_of_lists[n-1] = primes(n*100000);
}
//use the list_of_lists
}
Сама функция primes
не должна изменяться.
Существует способ использовать std::async
для проверки за время, прошедшее извне функции, но, к сожалению, нет способа убить std::future
до ее завершения. Поэтому мне интересно, как лучше это сделать.