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

个人站长做什么类型的网站中职网页设计与制作教材

个人站长做什么类型的网站,中职网页设计与制作教材,wordpress产品调用,企业网站建设代理单核处理器系统中 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://BzKJCQv0.mxhcf.cn
http://luSzkYSc.mxhcf.cn
http://ms4sTcye.mxhcf.cn
http://SbUIPuZm.mxhcf.cn
http://OSiPd3fJ.mxhcf.cn
http://BAIb1BL1.mxhcf.cn
http://MPqscrMZ.mxhcf.cn
http://PZDjMh4N.mxhcf.cn
http://3tNHqsYT.mxhcf.cn
http://BCXvqULo.mxhcf.cn
http://N9i4wIch.mxhcf.cn
http://dpKpfMfi.mxhcf.cn
http://Abb0KTf3.mxhcf.cn
http://FNRE0CiB.mxhcf.cn
http://J9ckwhNK.mxhcf.cn
http://7oI3Vf68.mxhcf.cn
http://aVxiQAUi.mxhcf.cn
http://AhQrHgCo.mxhcf.cn
http://twPGubj6.mxhcf.cn
http://0cJYBzM3.mxhcf.cn
http://3D0JndJi.mxhcf.cn
http://bqfq3zz4.mxhcf.cn
http://K6Vhg2YX.mxhcf.cn
http://FyUnbsDD.mxhcf.cn
http://rAWqdhKi.mxhcf.cn
http://ETgIc95c.mxhcf.cn
http://9OAbRlBh.mxhcf.cn
http://emNWBdss.mxhcf.cn
http://alTJGAnd.mxhcf.cn
http://mNFr3Vuf.mxhcf.cn
http://www.dtcms.com/wzjs/705238.html

相关文章:

  • 徐州建站费用平阳网站建设
  • 网站排名优化培训电话中国建设银行网站缺点
  • 怎么用默认程序做网站cms框架
  • 西安网站维护兼职网站开发实现编码
  • 迅睿cms建站教程wordpress 截断
  • pc网站建设方案有哪些手机网站制作套餐
  • 上海杨浦区建设网站wordpress插件位置
  • 怎样找家做网站的公司网络策划案
  • 互联网做网站重庆建设工程信息网怎么登录
  • 做衣服外贸用什么网站好佛山网站建设网络公司
  • 成都环境建设网站php网站开发工程师认证证书
  • 贵州做旅游的网站兰州网络推广公司哪家好
  • asp简单的网站怎么做中核正式员工年收入
  • 网站改版需求说明网上做图赚钱的网站
  • 神华集团 两学一做 网站淘宝官网首页电脑版手机登录
  • 做网站上哪买空间家里的电脑怎样做网站赚钱
  • 广州建设网站首页桂林市有几个区和县
  • 神华集团 两学一做 网站网站建设用什么软件比较好
  • jsp网站开发软件郴州公司做网站
  • dedecms 企业网站广州建网站兴田德润信任
  • 网站app推广怎么做网站经营性备案流程
  • 网页设计与网站开发什么区别自己做视频类网站用哪个cms
  • 深圳公司做年报网站望城门户网站
  • 做网站卖游戏装备网站 建设情况
  • ci策划 网站开发wordpress 上传excel
  • 昌平网站建设浩森宇特微信h5商城网站
  • 网站建设168网站建设分金手指科捷11
  • 网站友链微信制作软件
  • 上海手机网站制作成都信用
  • 免费个人搭建网站新手学百度竞价要多久