不可变集合(一个例子,在书的scala深度)



在书中,它有下面的例子,它只同步插入,但没有同步查找。我知道currentIndex将在插入后指向不同的对象,但是指向不同对象的操作是原子的吗?例如,假设指针是8字节(在64位机器上),那么在某个时刻currentIndex将切换指针,但如果该切换不是原子的,例如它首先切换前4字节,然后切换第二个4字节,如果在第一次和第二次切换之间,我们查找数据,那么指针指向的对象永远不存在,这将导致问题

class ImmutableService[Key, Value] extends Service[Key, Value] {
   var currentIndex = new ImmutableHashMap[Key,Value]
   def lookUp(k: Key): Option[Value] = currentIndex.get(k)
   def insert(k: Key, v: Value): Unit = synchronized {
       currentIndex = currentIndex + ((k, v))
   }
}

是的,currentIndex是一个引用-所以对它的更改将自动完成。

检查:

64位赋值在32位机器上是原子的吗?