提问人:COOLBEANS 提问时间:3/18/2019 最后编辑:COOLBEANS 更新时间:3/20/2019 访问量:60
如果我在 isVisited 上放置同步,并行图遍历可以工作吗?
Can parallel graph traversal work if I put synchronized on isVisited?
问:
我知道这句话:
非确定性 = 状态 + 并行性
我使用不可变的 Vector[Vector[Int]] 作为(邻接矩阵,即图形)来跟踪单元格之间的连接并构建新的边界单元格。一些线程似乎省略了这里和那里新边界单元的创建。我认为这可能是因为遍历图形是有状态的!我需要每个节点上的布尔值 isVisited 变量。我像这样将它混合到 Cell case 类中:
sealed trait Vertex { var visited = false }
我能在这里做些什么吗?我觉得我应该能够在我的 ParArray 中强制每个任务只使用一个线程 - 那么我就不需要担心这个问题了——我想?
有关更多上下文:
我有一个案例类,表示仅使用不可变集合的 Board:
case class Board(rCells: Vector[RCell],
vCells: Vector[Cell],
edges: Vector[Vector[Int]])
和单元格是矩形对象,它们在电路板上移动并在重叠时合并在一起: 请注意,我正在从上方扩展顶点。
`case class RCell(x1: Int,
y1: Int,
x2: Int,
y2: Int,
override val marker: Int,
override val id: Int = -1) extends Cell with Vertex
它看起来像这样:
我正在做一个蒙特卡洛树搜索,它涉及玩数千个游戏。我正在尝试并行执行此操作,如下所示:
val result: ParSeq[Seq[Node]] =
for(i <- (0 until numCores).par) yield
new MonteCarloTreeSearch().findNextMove(board, player, 2000)
答: 暂无答案
评论