6

据我了解,C# 中的 'volatile' 修饰符有两个作用:

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

在 x86 / amd64 上,(1) 无关紧要。这些处理器不需要用于易失语义的栅栏。(不过,ia64 不同。)

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

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

4

2 回答 2

2

也许就是你要找的。

于 2010-02-19T09:44:54.737 回答
1

Marc Gravell 有一个可重复的示例,说明缺少 volatile 关键字如何导致问题。

这里也有讨论。

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

于 2010-02-19T09:53:35.867 回答