阅读 这个问题,我想测试一下我是否可以证明对这种操作的原子性无法保证的类型的读写非原子性.
private static double _d;
[STAThread]
static void Main()
{
new Thread(KeepMutating).Start();
KeepReading();
}
private static void KeepReading()
{
while (true)
{
double dCopy = _d;
// In release: if (...) throw ...
Debug.Assert(dCopy == 0D || dCopy == double.MaxValue); // Never fails
}
}
private static void KeepMutating()
{
Random rand = new Random();
while (true)
{
_d = rand.Next(2) == 0 ? 0D : double.MaxValue;
}
}
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,即使在执行了整整三分钟之后,断言也拒绝失败.是什么赋予了?
当然,我不打算依赖规范没有明确保证的任何行为,但我想更深入地了解这个问题. …