我对C#中的内存障碍有疑问.例如,如果写语句是方法中的最后一条语句(变量v2是所关注的变量):int _v1 = 0;int _v2 = 0void X(){_v1 = 2;_v2 = 3;Thread.MemoryBarrier();}因为_v2写是最后一条语句,所以是否需要内存...

我对C#中的内存障碍有疑问.
例如,如果写语句是方法中的最后一条语句(变量v2是所关注的变量):
int _v1 = 0;
int _v2 = 0
void X()
{
_v1 = 2;
_v2 = 3;
Thread.MemoryBarrier();
}
因为_v2写是最后一条语句,所以是否需要内存屏障语句.换句话说,处理器是否认识到这是方法的结束,应该将其缓存刷新到内存中.
提前致谢.
解决方法:
如果希望在写入_v2之后存在内存屏障,则应保持对Thread.MemoryBarrier的调用不变.我还没有看到任何文档建议在方法结束后自动注入内存屏障.如果没有记录,则必须假定C#编译器,JIT编译器和硬件在看似合适的情况下都具有最大的自由度来优化代码,即使实际上它们的选项可能会受到实现细节的限制.
织梦狗教程
本文标题为:C#内存屏障


基础教程推荐
猜你喜欢
- C#表达式中的动态查询详解【译】 2023-03-28
- C#使用Unity实现剪刀石头布游戏 2023-01-11
- C#支付宝扫码支付代码完整版 2022-12-26
- Unity实现打砖块游戏 2023-06-07
- c# 利用易福门振动模块VSE002采集振动数据的方法 2023-02-08
- 浅谈C# 抽象类与开闭原则 2023-03-03
- C# 10个常用特性汇总 2023-03-03
- deepin命令行安装_在基于Debian开发的Deepin上快速搭建.net core开发环境 2023-09-27
- C#使用iTextSharp操作PDF 2023-06-14
- C#接口INotifyPropertyChanged使用方法 2023-05-16