Thread.MemoryBarrier的问题,最后100分了! 本帖最后由 sevenlee4125 于 2013-11-04 21:01:43 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不明觉历,LZ好像知道得太多了感觉上Volatile只是阻止编译器做过多优化而已,以避免把读写指定的变量的指令给优化掉就可以了。所以这代码可能只是给编译器看的 :) MemoryBarrier 调用之后的内存存取,再执行 MemoryBarrier 调用之前的内存存取的方式这就是说调用 MemoryBarrier 会同步多个处理器的缓存栈。因此就包含了你说的刷新缓存中的脏数据。 [MethodImpl(MethodImplOptions.NoInlining)]public static int VolatileRead(ref int address){ int num = address; MemoryBarrier(); return num;}没啥好说的反编译出来的read C#代码。个人认为。。MemoryBarrier除了不允许乱序外,还强制从内存刷新数据了。。强调了内存读取顺序不能变,是不是就意味着。。不能使用系统缓存了吧? PDA关机重启后还在未关机的界面 C# 中对INI文件读写 初学,通俗的解释一下堆栈/堆,装箱/拆箱的意思? C#中怎么向Label中添加一个小图片 用C#删除文本文档 扫雷思想 关于时间比较的问题 怎样屏蔽键盘的单撇号,禁止在一个TextBox中输入单撇号! **************如何读取mp3类型歌曲的"持续时间"这个属性********** [讨论]C#学习经验和优秀图书推荐,新手老手都进来聊聊吧! WPF动态添加Menu菜单 C#绘制直方图中遇到问题
以避免把读写指定的变量的指令给优化掉就可以了。所以这代码可能只是给编译器看的 :)
这就是说调用 MemoryBarrier 会同步多个处理器的缓存栈。因此就包含了你说的刷新缓存中的脏数据。
public static int VolatileRead(ref int address)
{
int num = address;
MemoryBarrier();
return num;
}没啥好说的反编译出来的read C#代码。个人认为。。MemoryBarrier除了不允许乱序外,还强制从内存刷新数据了。。强调了内存读取顺序不能变,是不是就意味着。。不能使用系统缓存了吧?