线程安全的内存缓存

时间:2014-09-16 11:39:57

标签: multithreading scala

我的Scala应用程序中需要一个简单的线程安全的内存缓存。

我需要一个支持scala.collection.mutable.MapLike

的此操作的数据结构
def getOrElseUpdate(key: A, op: => B)

我希望这个操作是原子的。这个操作在scala.collection.concurrent.TrieMap中是原子的吗?或者我应该使用其他一些数据结构?

我使用Scala 2.10,但很快就会升级到2.11。

我不想使用scala.collection.mutable.SynchronizedMap,因为它在Scala 2.11中已弃用。

2 个答案:

答案 0 :(得分:4)

TrieMap适用于此类案例

  

并发hash-trie或TrieMap是一个并发线程安全的无锁实现的哈希数组映射trie。

TrieMap中的getOrElseupdate可以使用线程安全。所以是的,你应该使用它。根据{{​​3}},当插入率非常高时,triemap实际上很棒。虽然差别很难被观察到。

答案 1 :(得分:1)

唉,TrieMap没有覆盖getOrElseUpdate,这使得此方法线程安全。

SI-7943 TrieMap method getOrElseUpdate is not thread-safe