multithreading - 具有快速元素删除和随机获取的线程安全可变集合

标签 multithreading scala collections

我需要一个具有三个操作的线程安全数据结构:remove、getRandom、reset。 我现在只有两个想法。

首先:seq in syncronized var.

val all: Array[String] =  ... //all possible.
var current: Array[String] = Array.empty[String]

def getRandom(): = {
  val currentAvailable = current
  currentAvailable(Random.nextInt(currentAvailable.length))
}

def remove(s: String) = {
  this.syncronized {
     current = current diff Seq(s)
  }
}

def reset(s: String) = {
  this.syncronized {
     current = all
  }
}

第二个: 维护一些 Map[String,Boolean],当元素当前存在时,bool 为真。主要问题是制作一个快速的 getRandom 方法(在最坏的情况下不是像 O(n) 这样的方法)。

有没有更好的方法来实现它?

最佳答案

Scala's Trie是一个无锁数据结构,支持快照(又名你的currentAvailable)和快速移除

关于multithreading - 具有快速元素删除和随机获取的线程安全可变集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26758627/

相关文章:

scala - 如何避免在 Scala 中编写令人困惑的 DSL

java - 意外绑定(bind) - 为什么我不能在此收集器中使用类似 T extends Collection 的东西?

java - Guava :Set<K> + Function<K,V> = Map<K,V>?

scala - akka-http 中的连接池使用源队列实现线程安全吗?

scala - 在dispatch-classic中使用cookie

c# - 优化 list<T>.Sort(Comparer)

.net - 是否有针对多核优化的 .NET 类/函数?

java - StreamCorruptedException : invalid type code: AC

c# - 可选的线程安全(线程安全部分仅在条件下)

python - 控制线程类python中的循环