C#记忆障碍

C#记忆障碍,c#,multithreading,memory-barriers,C#,Multithreading,Memory Barriers,我有一个关于C#中记忆障碍的问题。 例如,如果write语句是方法中的最后一个语句(变量v2是关注的一个): 由于_v2write是最后一个语句,是否需要内存屏障语句。换句话说,处理器是否认识到这是一个方法的结束,并且应该将其缓存刷新到内存中 提前感谢。如果您希望在写入\u v2后存在内存障碍,则应保持对线程.MemoryBarrier的调用不变。我没有看到任何文档表明在方法结束后自动注入内存屏障。如果没有文档记录,那么您必须假设C#编译器、JIT编译器和硬件在优化代码时都有最大的自由度,尽管实

我有一个关于C#中记忆障碍的问题。 例如,如果write语句是方法中的最后一个语句(变量v2是关注的一个):

由于_v2write是最后一个语句,是否需要内存屏障语句。换句话说,处理器是否认识到这是一个方法的结束,并且应该将其缓存刷新到内存中


提前感谢。

如果您希望在写入
\u v2
后存在内存障碍,则应保持对
线程.MemoryBarrier
的调用不变。我没有看到任何文档表明在方法结束后自动注入内存屏障。如果没有文档记录,那么您必须假设C#编译器、JIT编译器和硬件在优化代码时都有最大的自由度,尽管实际上它们的选择可能受到实现细节的限制。

旁注:处理器对C#方法一无所知,产生的CPU指令甚至可能不是JIT后的任何类似方法-即,可以内联。Ok。那么,在上述情况下,记忆障碍陈述是否仍然必要@Alexeilevenkov你引用的帖子的可能重复内容是询问记忆障碍的使用情况。然而,我询问了一个具体的案例,上面的屏障是否必要@Ianmercerh您的案例与示例中的Barrier#2有何不同?非常感谢,这正是我要问的。
int _v1 = 0;
int _v2 = 0

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