系统相关
首页 > 系统相关> > C#内存屏障

C#内存屏障

作者:互联网

我对C#中的内存障碍有疑问.
例如,如果写语句是方法中的最后一条语句(变量v2是所关注的变量):

int _v1 = 0;
int _v2 = 0

void X()
{
    _v1 = 2;
    _v2 = 3;
   Thread.MemoryBarrier();
}

因为_v2写是最后一条语句,所以是否需要内存屏障语句.换句话说,处理器是否认识到这是方法的结束,应该将其缓存刷新到内存中.

提前致谢.

解决方法:

如果希望在写入_v2之后存在内存屏障,则应保持对Thread.MemoryBarrier的调用不变.我还没有看到任何文档建议在方法结束后自动注入内存屏障.如果没有记录,则必须假定C#编译器,JIT编译器和硬件在看似合适的情况下都具有最大的自由度来优化代码,即使实际上它们的选项可能会受到实现细节的限制.

标签:memory-barriers,multithreading,c
来源: https://codeday.me/bug/20191121/2049679.html