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
。