Четыре потока генерируются и передают свой диапазон, необходимый для зацикливания матрицы для выполнения некоторой операции.По сути, я хочу взять цикл for и разбить работу на четыре части.
GE_threaddiv t = new GE_threaddiv(k + 1,toPass + (k+1),k,A[k][k],"1");
GE_threaddiv t2 = new GE_threaddiv(toPass + (k+1),toPass*2 + (k+1),k,A[k][k],"2");
GE_threaddiv t3 = new GE_threaddiv(toPass*2 + (k+1),toPass*3 + (k+1),k,A[k][k],"3");
GE_threaddiv t4 = new GE_threaddiv(toPass*3 + (k+1),toPass*4 + (k+1),k,A[k][k],"4");
t.start();
t2.start();
t3.start();
t4.start();
try {
t.join();
t2.join();
t3.join();
t4.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Каждый поток запускает цикл for с указанным диапазоном a, являющимся началом, а b - концом сегмента (передается, когда поток был создан).A - это глобальная матрица, а temp - это значение из A, переданное в поток при создании.
public void run()
{
try
{
for(int j = a; j < b; j++) {
A[c][j] = A[c][j]/temp;
}
}
catch (Exception e)
{
System.out.println ("Exception is caught");
}
}
Моя реализация работает, однако она значительно медленнее (величины), чем если бы я запускал цикл for в последовательном режиме.Чем больше набор данных, тем медленнее время.Подтверждено, что потоки идут рядом.Я предполагаю, что снижение эффективности происходит из-за того, как каждый поток связан с доступом к памяти.Любая помощь будет принята с благодарностью!