gpt4 book ai didi

scala - Scala 的 collection.mutable.PriorityQueue 线程安全吗?

转载 作者:行者123 更新时间:2023-12-04 22:59:05 29 4
gpt4 key购买 nike

我正在使用 PriorityQueue跨多个线程。我不确定它是线程安全的数据结构。

使用是否安全scala.collection.mutable.PriorityQueue跨多个线程?

最佳答案

TL;DR:这不安全。

我们来看一下! scala.collection.mutable.PriorityQueue uses

private val resarr = new ResizableArrayAccess[A]

其中 ResizableArrayAccess 是 defined在 PriorityQueue 中作为
private class ResizableArrayAccess[A] extends AbstractSeq[A] with ResizableArray[A] with Serializable {

从那里,前往 scala.collection.mutable.ResizableArray ,很明显这不是线程安全的,例如通过查看 update方法:
protected var array: Array[AnyRef] = new Array[AnyRef](math.max(initialSize, 1))
// ... snip ... //
def update(idx: Int, elem: A) {
if (idx >= size0) throw new IndexOutOfBoundsException(idx.toString)
array(idx) = elem.asInstanceOf[AnyRef]
}

因此,我们可以不 protected 地访问可变变量并使用 scala.collection.mutable.PriorityQueue不鼓励来自多个线程。

如果您确实需要从多个线程使用它并且并发性并不重要,则可以使用同步的某种含义,例如 scala.util.SyncVar以防止并发问题,如竞争条件。否则使用其他数据结构会更好。

关于scala - Scala 的 collection.mutable.PriorityQueue 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31847852/

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