并行操作在 Scala 中挂起

Jav*_*dra 3 macos scala

Scala 菜鸟在这里: val pv = (1 to 100).toArray.par

现在我想对这个并行集合应用一个映射函数 pv

pv.map(_ * 2)

但是,上述操作挂起。有什么理由吗?

2.12.4在 Mac OS X (High Sierra) 上使用 Scala 版本

che*_*ohi 5

似乎这是由静态初始化程序死锁引起的,请参阅:

https://github.com/scala/scala-parallel-collections/issues/34

这个问题在repl 中指出,当创建并行集合时,repl 会为其生成一个包装器,当 init 时,它会导致死锁

它也可以从以下程序中复制:

https://github.com/scala/bug/issues/8119

object Foreacher {
  val n = 0
  val m = List(1).par.foreach(_ => n)
  def main(args: Array[String]): Unit = println("Hello, all")
}
Run Code Online (Sandbox Code Playgroud)

  • 特别是参见 GitHub 问题中链接的其他 Stack Overflow 答案:[/sf/ask/1062333961/ #15176433](/sf/ask/1062333961/#15176433) (2认同)