首先,我试图找出 using 是否Interlocked
仍然需要volatile
字段定义,这是我真正的问题。
但。由于懒得分析生成的 MSIL,我决定在实践中检查它。
我正在尝试使用MSDN 示例,以便volatile
在代码应该在发布版本中中断并进行优化时使用。什么都没有。代码工作正常(在这种情况下 - 主线程优雅地终止),优化开启和关闭。
volatile
当我从一个线程使用Interlocked
并从另一个没有锁的线程读取时,我是否仍然需要在字段上使用关键字?- 来自第一个问题的代码的简单示例在哪里
volatile
有区别? - 为什么当我删除
volatile
关键字并内置发布时,MSDN 示例仍然有效?
用于说明问题 1 的代码片段。
class Example
{
volatile int val;
void Do()
{
Task.Run(() => { while (val == 0) Console.WriteLine("running"); });
Thread.Sleep(1000);
Interlocked.Increment(ref val);
Console.WriteLine("done.");
Console.ReadLine();
}
}