Задача состоит в том, чтобы преобразовать значения из массива src и записать новые значения в массив dst.Странное поведение при создании ForkJoinTask для многопоточности в цикле Scala
Когда я создаю ForkJoinTasks в цикле в то время как
val height: Int = 4;
val numTasks: Int = 2;
var tasks = scala.collection.mutable.ListBuffer.empty[ForkJoinTask[Unit]]
val jump: Int = src.height/numTasks
var from: Int = 0;
while (from < height) {
val end: Int = height.min(from + jump);
val t: ForkJoinTask[Unit] = task {
run(src, dst, from, end) // (2,2), (2,1), what is happening?
}
from = end
}
for (t <- tasks.toList) {
t.join()
}
Тогда странно, функция запуска занимает (с, конец) аргументов значение как (2, 2). Но если я разбить его вручную на две задачи, то он работает нормально, как (0,1) и (1,2).
val t1 = task {
run(src, dst, 0, height/2); // (0, 1)
}
val t2 = task {
run(src, dst, height/2, height); // (1, 2)
}
t1.join()
t2.join()
Мне сложно определить, что происходит. Это моя первая программа Scala, поэтому мне может не хватать чего-то очень тривиального. Любые комментарии будут оценены.
спасибо.
Уточнитните SRC и Dest ¿никакого отношения валь высоты? – Krlos
src и dst - массивы. run считывает значения из src, записывает новые в dst. – user557583