据我所知,C#中的'volatile'修饰符有两个效果:
在x86 / amd64上,(1)无关紧要。这些处理器不需要用于易失性语义的围栏。 (尽管如此,ia64是不同的。)
所以,我们归结为(2)。但是,对于我尝试过的例子,volatile对jit-ted程序集没有任何影响。
我的问题是:您能举例说明一个C#代码示例,其中在字段上添加'volatile'修饰符会导致不同的jit-ted汇编代码吗?
答案 0 :(得分:2)
也许this正是您所寻找的。 p>
答案 1 :(得分:1)
Marc Gravell有repeatable example知道如何缺少volatile关键字会导致问题。
还讨论了here。
值得注意的是(正如Marc所做的那样)编译器优化仅在以发布模式编译时才会出现。