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

时间:2010-02-19 09:37:18

标签: c# .net concurrency synchronization volatile

据我所知,C#中的'volatile'修饰符有两个效果:

  1. 根据需要插入目标处理器的围栏
  2. 防止某些编译器优化
  3. 在x86 / amd64上,(1)无关紧要。这些处理器不需要用于易失性语义的围栏。 (尽管如此,ia64是不同的。)

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

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

2 个答案:

答案 0 :(得分:2)

也许this正是您所寻找的。

答案 1 :(得分:1)

Marc Gravell有repeatable example知道如何缺少volatile关键字会导致问题。

还讨论了here

值得注意的是(正如Marc所做的那样)编译器优化仅在以发布模式编译时才会出现。

相关问题