Scala,正在等待对并行集合执行foreach



我有如下代码

    val g = new Graph(vertices)
        //Firts part
        (1 to vertices).par.foreach( i => g + new Vertex(i))
       //Second part
          for (i <- 1 to edges) {
            val data = scala.io.StdIn.readLine()
            val d = data.split(" ")
            val v1 = d(0).toInt
            val v2 = d(1).toInt
            val length = d(2).toInt
            g+(v1, v2, length)
        }

我想按顺序执行代码的第一部分和第二部分。目前对于循环运行之前的所有顶点都已添加到g中。在代码+(加号)中,定义将Vertex的新实例添加到MutableList。

我是scala的新手,请帮助

您可以将每个调用包装在以下中

new Thread(new Runnable {
  override def run(): Unit = {
    //Code part here:
  }
}).start()

您还需要确保Graph实现是线程安全的,因为您将有两个线程同时修改它。

看起来你并没有从任何一部分返回任何东西,但如果你返回了,你可以使用Future。请参阅此处了解详细信息。

并行集合仅并行集合的计算。添加边的计算的第二部分应该在添加顶点之后进行。

我想假设的是,通过解析,可能有一些顶点根本不存在于顶点中,可能是一些空白或类似的东西。

我不确定在向图中添加顶点时会发生什么,但如果操作应该没有副作用,则并行的foreach应该小心。有关详细信息,请参阅此。也许这根本不相关。

我找到了解决方案。我读了更多关于向集合并行添加新元素的内容,它不是线程保存。我将MutableList替换为fixedsize数组,并通过索引添加新元素。

下面的一些代码:

class Graph(val end: Int) {
  private val vertices : Array[Vertex] = new Array[Vertex](end)
  def +(index: Int, v: Vertex): Unit = {
    vertices(index) = v
  }  
  (...)
}
     //Firts part
      (1 to vertices).par.foreach( i => g + (i-1,new Vertex(i))) //add new vertex to array by index

相关内容

  • 没有找到相关文章

最新更新