Thread.VolatileRead() vs Volatile.Read() Thread.VolatileRead()和Volatile.Read()的区别
- 论坛
- Thread.VolatileRead() vs Volatile.Read() Thread.VolatileRead()和Volatile.Read()的区别
26 浏览
Thread.VolatileRead() vs Volatile.Read() Thread.VolatileRead()和Volatile.Read()的区别
在大多数情况下,我们被告知更喜欢使用Volatile.Read而不是Thread.VolatileRead,因为后者会产生一个完整的内存屏障,而前者只会产生相关的半屏障(例如获取屏障),这样更高效。
然而,在我的理解中,Thread.VolatileRead实际上提供了Volatile.Read所没有的功能,这是因为Thread.VolatileRead的实现方式:
public static int VolatileRead(ref int address) {
int num = address;
Thread.MemoryBarrier();
return num;
}
由于实现的第二行有一个完整的内存屏障,我相信VolatileRead实际上确保了最后写入address的值将被读取。
根据维基百科的说法,“完整的屏障确保在屏障之前的所有加载和存储操作在屏障之后的任何加载和存储操作之前被提交。”
我的理解正确吗?因此,Thread.VolatileRead是否仍然提供了Volatile.Read没有的功能?