当前位置: 首页 > wzjs >正文

绵阳的网站建设seo关键词优化排名外包

绵阳的网站建设,seo关键词优化排名外包,禅城网站建设公司,衡水网站建设与制作单核处理器系统中 store buffer 的可见性 这里说了 单核情况下 一个示例程序 因为 两点的存在导致的 内存一致性问题 store 指令 从 store buffer “出队” 的顺序 不能保证先入先出Store Buffer Forwarding 有限制条件,在部分情况下不能Forwarding 即 在 X86 下 ,单核不存在内…

单核处理器系统中 store buffer 的可见性 这里说了 单核情况下 一个示例程序 因为 两点的存在导致的 内存一致性问题

  1. store 指令 从 store buffer “出队” 的顺序 不能保证先入先出
  2. Store Buffer Forwarding 有限制条件,在部分情况下不能Forwarding
  • 即 在 X86 下 ,单核不存在内存一致性问题 ,但在ARM/riscv 下,单核存在内存一致性问题
  • 那么 我们将其 扩展为多核 ,如果 单核 存在内存一致性问题, 那么 多核照样存在内存一致性问题

不过我们 提出一个新的 场景 , 即多核场景下的 因为一个新的原因导致的 内存一致性问题,原因为

  1. 不保证写的顺序可见性
多核场景下,有cache,有store buffer  
一开始内存中 ready 为 0 , data 为 0// 用户函数     运行在 core 0 
data  = 123;  // S1
ready = 1  ; // S2// 用户函数     运行在 core 1 
if (ready == 1) {assert(data == 123);
}此时我们假设 store 指令 按照 程序编码顺序 "出队", // 虽然在 弱一致性模型中,这个不能保证
那么 assert 会失败吗?
虽然 在core 0 而言指令 S1 和 S2 按照程序顺序提交,在core1看来其顺序未必相同
例如对 ready 的写可能会较快的传播到处理器1(可能因为缓存命中)而对 data 的写 可能会比较慢地传播到处理器1(可能因为缓存缺失)

🧠 反方观点1 : 我认为 不管快慢, 都是会读到的, 只会导致 流水线 stall 而已 , 所以 assert 不会失败

你说的“流水线 stall,等到读到再继续”,这种理解适用于单核或强一致模型(如 x86),但在 多核弱一致模型中,读取操作不会 stall 去等待一致性,而是读取当前可见的值

✅ 在弱一致模型中(如 ARM/RISC-V):

  • Core 0data=123 写入其 store buffer → cache
  • 紧接着 ready=1 也写入其 cache;

这两次写入虽然在 Core 0 看是顺序的,但:

  • Core 1 在访问 ready 时,如果它的 cache 失效,会向系统请求 ready 的缓存行,可能很快被刷新到了内存并响应;
  • data 对应的缓存行可能还没刷新或系统没有通知 Core 1 其缓存无效(Invalidate Miss);
  • 所以 Core 1 在这时看到了 ready==1,却还没看到 data==123

这就出现了你说的那个令人惊讶的情况:

if (ready == 1) {assert(data == 123); // 这里失败
}

✅ 为什么会这样?根本原因是内存模型

架构是否允许这种乱序可见性(S2可见但S1不可见)
x86❌ 不允许:Store 被强制顺序可见(TSO)
ARM✅ 允许:Weak Ordering
RISC-V✅ 允许:Weak Ordering

所以在 ARM/RISC-V 上,除非你加上 memory barrier(内存屏障),否则确实可能出现:

  • data 还没传播出去,
  • ready 已经传播到其他核,
  • 导致其他核看到不一致状态。

✅ 为什么不“stall”等待写都可见呢?

因为:

  • 读取操作不是同步操作,不会等待写入同步完毕。
  • 多核系统设计目标是并发性和性能,不会为了“等待另一个核心的数据刷新”而主动阻塞读取。
  • 如果需要保证顺序,需要**人为添加屏障(memory barrier)**或用同步机制(如锁、原子操作)。

✅ 如果你希望 assert 不失败,该怎么做?

在 Core 0 上:

data = 123;
dmb();         // 数据内存屏障,确保 data 的写对其他核心可见
ready = 1;

或用 C11 原子写:

atomic_store_explicit(&data, 123, memory_order_relaxed);
atomic_store_explicit(&ready, 1, memory_order_release);

在 Core 1 上:

if (atomic_load_explicit(&ready, memory_order_acquire)) {assert(atomic_load_explicit(&data, memory_order_relaxed) == 123);
}

这种用法利用了 release-acquire 同步语义,能确保 Core1 在看到 ready==1 后,也看到之前的 data 写。


✅ 总结

问题是否成立说明
多核系统会 stall 直到看到一致的数据不会,读取会看到“当前可见的值”,不等于等待一致
store buffer 是 FIFO,所以写顺序一致✅/❌顺序进入 store buffer,但何时对其他核心可见不一定顺序
传播快慢是否只是影响延迟在弱一致模型下,传播差异导致可见顺序乱序,进而出现 assert 失败
assert(data == 123) 会失败吗✅ 可能在 ARM/RISCV 等架构上,确实可能,如果没有内存屏障
http://www.dtcms.com/wzjs/91637.html

相关文章:

  • 做平面设计图的网站今日新闻头条官网
  • 如何创建网站下载免费网站seo诊断
  • 太原市城市建设拆迁中心网站百度推广客服电话多少
  • 企业对电子商务网站的建设百度seo在哪里
  • 重庆网站建设流程google search
  • 北京平面设计网站人民日报今天新闻
  • 许昌建设网站哪家好seo网站优化快速排名软件
  • 品牌和网站建设百度网盘app官方下载
  • 建站程序的选择网络营销专业就业前景
  • 水利网站建设管理汇报深圳龙岗区疫情最新消息
  • 网站运营暂停非企户百度推广
  • 电影的网站做他妈的没完没了没了吗石家庄邮电职业技术学院
  • 手机网站 后台今日热点新闻一览
  • uiapp博客 个人网站怎样推广自己的商城
  • 公司网站有时登不进 服务器陕西网站制作
  • 深圳网站建设 工作室京东seo搜索优化
  • 拼多多刷单网站开发太原网站开发
  • 开发一个商城网站需要多少钱百度app官网下载安装
  • 呼和浩特网站制作 建设整站优化要多少钱
  • 眉山建设网站友情链接适用网站
  • 做外贸网站功能网站优化seo
  • 校园网站建设管理工作制度河南网站推广优化
  • 在网站做的pdf有水印如何删除重庆seo论
  • 网站备案在哪里找seo优化实训报告
  • 自己做网站地址网站优化搜索排名
  • 化工网站模板自己做网站
  • 一般设计网站页面用什么软件广州新闻24小时爆料热线
  • 网站已经开发怎样用微信实现手机网站开发新手做seo怎么做
  • flash网站读条怎么做今日新闻最新消息50字
  • 从网站建设到网站运营2345网址导航是病毒吗