本帖最后由 sevenlee4125 于 2013-11-04 21:01:43 编辑

解决方案 »

  1.   

    不明觉历,LZ好像知道得太多了感觉上Volatile只是阻止编译器做过多优化而已,
    以避免把读写指定的变量的指令给优化掉就可以了。所以这代码可能只是给编译器看的 :)
      

  2.   

    MemoryBarrier 调用之后的内存存取,再执行 MemoryBarrier 调用之前的内存存取的方式
    这就是说调用 MemoryBarrier 会同步多个处理器的缓存栈。因此就包含了你说的刷新缓存中的脏数据。
      

  3.   

    [MethodImpl(MethodImplOptions.NoInlining)]
    public static int VolatileRead(ref int address)
    {
        int num = address;
        MemoryBarrier();
        return num;
    }没啥好说的反编译出来的read C#代码。个人认为。。MemoryBarrier除了不允许乱序外,还强制从内存刷新数据了。。强调了内存读取顺序不能变,是不是就意味着。。不能使用系统缓存了吧?