C#.NET-理解中的volatile关键字.pdfVIP

  • 1
  • 0
  • 约2.56千字
  • 约 5页
  • 2022-10-10 发布于浙江
  • 举报
C#.NET:理解volatile关键字 要理解 C# 中的 volatile 关键字,就要先知道编译器背后的一个基本优化原理。 比如对于下面这段代码: public class Example { public int x; public void DoWork() { x = 5; va y = x + 10; Debug.WriteLine(x = +x + , y = +y); } } 在 Release 模式下,编译器读取 x = 5 后紧接着读取 y = x + 10 ,在单线程思 维模式下,编译器会认为 y 的值始终都是 15。所以编译器会把 y = x + 10 优化 为 y = 15 ,避免每次读取 y 都执行一次 x + 5。但 x 字段的值可能在运行时被 其它的线程修改,我们拿到的 y 值并不是通过最新修改的 x 计算得来的,y 的值 永远都是 15。 也就是说,编译器在 Release 模式下会对字段的访问进行优化,它假定字段都 是由单个线程访问的,把与该字段相关的表达式运算结果编译成常量缓存起来, 避免每次访问都重复运算。但这样就可能导致其它线程修改了字段值而当前线程 却读取不到最新的字段值。为了防止编译器这么做,

文档评论(0)

1亿VIP精品文档

相关文档