以下是MSDN文档对System.Threading.Volatile.Read()
所说的内容:
在需要它的系统上,插入一个内存屏障,阻止处理器重新排序内存操作,如下所示:如果在代码中此方法后出现读取或写入,则处理器无法在此方法之前移动它。
对于Volatile.Write()
:
在需要它的系统上,插入一个内存屏障,阻止处理器重新排序内存操作,如下所示:如果在代码中此方法之前出现读取或写入,则处理器无法在此方法之后移动它。
我的理解是,根据定义,“volatile”读取总是获取内存位置的当前值,并且易失性写入立即提交到内存。因此,易失性读/写语义可以避免由于处理器依赖缓存数据而导致的意外结果。但是,易失性读或写操作只是单个内存访问操作,并且与先前或后续的内存访问没有任何关系,不是吗?
Volatile.Read()
和Volatile.Write()
中使用的内存栅栏在某些情况下可能很有用,但它们的功能似乎超出了易失性读取或写入的范围。为什么它们包含在那些方法实现中?如果程序员想要确保以特定顺序将两个写入提交到内存,为什么不让程序员使用两次调用Volatile.Write()
?