volatile.Read / volatile.Write for "double" atomic吗?



MSDN 指出

长整型、乌龙型、双精度型和十进制以及用户定义的类型不保证是原子型 5.5 变量引用的原子性

Volatile.Write Method (Double%, Double)可以作为原子操作吗? 如果是这样,如何保证这一点?

在一个线程中执行Volatile.Write(ref mydouble, value);并在另一个线程中Volatile.Read(ref mydouble) mydouble具有double类型的地方是否安全?

这是普遍的问题。另一个问题 - 在这种特殊情况下我应该怎么做:

  • 2 处理器至强 x64 服务器
  • Windows + MS .NET 4.5
  • 从不同线程读/写双倍
  • 最小的
  • 延迟(需要最小的,因为我正在编写HFT软件(

不,易失性不是原子的,在 SMP(>1 处理器(系统中假设这样是不安全的。它在单处理器计算机上是安全的。

除非您确实需要性能,否则您可能想要Interlocked,无论是Interlocked.Exchange还是Interlocked.Read

最新更新