gpt4 book ai didi

exception - 并发程序中具有不可变 Map 的 Scala 错误?

转载 作者:行者123 更新时间:2023-12-04 21:26:50 29 4
gpt4 key购买 nike

我为棋盘游戏九人莫里斯写了一个蒙特卡洛球员。一切基本上都是不可变的。该程序涉及大量 future (数百个)和大量修改不可变 Map。有时我会因以下异常而崩溃:

java.lang.NullPointerException
at scala.collection.mutable.HashTable$class.elemHashCode(HashTable.scala:154)
at scala.collection.immutable.HashMap.elemHashCode(HashMap.scala:41)
at scala.collection.mutable.HashTable$class.findEntry(HashTable.scala:66)
at scala.collection.immutable.HashMap.findEntry(HashMap.scala:41)
at scala.collection.immutable.HashMap.undo$1(HashMap.scala:132)
at scala.collection.immutable.HashMap.undo$1(HashMap.scala:130)
at scala.collection.immutable.HashMap.makeCopy(HashMap.scala:154)
at scala.collection.immutable.HashMap.makeCopyIfUpdated(HashMap.scala:161)
at scala.collection.immutable.HashMap.update(HashMap.scala:66)
at scala.collection.immutable.Map$class.$plus(Map.scala:66)
at scala.collection.immutable.HashMap.$plus(HashMap.scala:41)
at morris.players.MapBasedMorrisBoard.applyMove(MapBasedMorrisBoard.scala:30)
at morris.players.MonteCarloPlayer$$anonfun$main$1$$anonfun$apply$1.apply(MonteCarloPlayer.scala:77)
at morris.players.MonteCarloPlayer$$anonfun$main$1$$anonfun$apply$1.apply(MonteCarloPlayer.scala:77)
at scala.actors.Futures$$anonfun$2$$anonfun$apply$1.apply(Future.scala:45)
at scala.actors.Futures$$anonfun$2$$anonfun$apply$1.apply(Future.scala:44)
at scala.actors.Reaction.run(Reaction.scala:78)
at scala.actors.FJTask$Wrap.run(Unknown Source)
at scala.actors.FJTaskRunner.scanWhileIdling(Unknown Source)
at scala.actors.FJTaskRunner.run(Unknown Source)

我只使用不可变的 Maps,所以我想知道这是由我自己的代码中的错误引起的,还是由 Scala 库中的错误引起的。查看跟踪时,您可以看到,在堆栈的下方有对可变 HashTable 的调用。也许这会导致并发问题?

我的程序中发生异常的代码只是向不可变 Map 添加另一个集合:
myMap ++ (someInteger -> aValue)

编辑:
没有并发的同一个程序可以完美运行。

最佳答案

我已经为 Scala 库提交了一个错误报告。事实证明,这是一个已知问题。 HashMap 的实现(在 Scala 中用作标准 Map 类型)不适合在并发程序中使用,因为在幕后,它使用可变类型。这也可以在堆栈跟踪中观察到。 Scala 人希望替换 2.8 中的实现。

作为一种变通方法,建议使用真正不可变的 TreeHashMap。我已经这样做了并且可以确认它有效。

Link to original bug report

关于exception - 并发程序中具有不可变 Map 的 Scala 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1927287/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com