Есть цикл, в котором рассчитываются данные. В каждом новом проходе создается объект с входными параметрами и после расчета эти входных параметров выдается конечное число - результат. Т.к. итерации не зависят друг от друга, через AsParallel
я добавил параллельное выполнение данного цикла. Но, у меня каждый поток пересекается с другим. Окей. Я добавил в функции расчета lock. Но тут появилась проблема, что расчеты не будут вестись параллельно, потому что к новому расчету нельзя будет приступить, пока предыдущий поток не закончится. И задача в том, чтобы сделать проход по циклу параллельным, но, чтобы каждый поток никак не залезал в данные другого потока. Как можно решить такую задачу?
Например :
public class A
{
public int g;
public int c;
public A(int gC, int cC)
{
g = gC;
c = cC;
}
}
public class C
{
public C()
{
}
public double Result()
{
double g = 0;
for(int i = 0; i < 100; i++)
{
for(int j = 0; j < 100; j++)
{
double resCalc = Calculation(i, j);
if (resCalc > g)
g = resCalc;
}
}
return g;
}
public double Calculation(int Ag, int Ac)
{
A a = new A(Ag, Ac);
return a.c + a.g;
}
}
Пример написан на скорую руку, но результат примерно такой. Здесь мы в классе C
создаем объект класса A
с данными параметрами цикла, и считаем сумму параметров. Т.к. каждая итерация не зависит от предыдущей, мы можем это сделать параллельным, но тогда потоки будут пересекаться. Нужно, чтобы каждый поток создавал объект класса A
и работал именно с ним и возвращал значение именно своё. Если я добавляю lock, то у меня убирается многопоточность цикла, потому что расчет идет последовательно.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Исходные данные: Примитивное консольное приложение, допустим по выбору президента на выборахПосле запуска приложения пользователь должен...
Установил Xamarin в VS 2017Создаю проект Cross Platform App > Пустое приложение > Xamarin
Есть иерархическая структура TreeView с TreeViewItem, для каждого TreeViewItem нужно разрешить перетаскивание файла из проводника и сохранять ссылку на этот...
Есть папка и ее полный путь "С:\Temp"В данной папке есть вложенные папки и уровень вложений не известен