阻止C#编译器优化的'volatile'示例?

Igo*_*sky 6 .net c# concurrency synchronization volatile

根据我的理解,C#中的'volatile'修饰符有两个效果:

  1. 根据需要为目标处理器插入栅栏
  2. 防止某些编译器优化

在x86/amd64上,(1)无关紧要.这些处理器不需要用于易失性语义的围栏.(虽然ia64不同.)

所以,我们归结为(2).但是,对于我尝试过的例子,volatile对jit-ted程序集没有任何影响.

我的问题是:你能举一个C#代码示例的例子,在字段上添加'volatile'修饰符会导致不同的jit-ted汇编代码吗?

tan*_*ius 2

也许就是您正在寻找的。