1
|
Ruslan PiotrNycz · 技术社区 · 7 年前 |
![]() |
1
4
跨缓存线边界拆分变量。然后,加载和存储都不是原子的,在所有真正的CPU上都会被撕裂。 e、 g.在NASM语法中:
要制作一个在实践中演示这一点的测试程序,请参阅 SSE instructions: which CPUs can do atomic 16B memory operations?
此外,80位x87
任何Intel或AMD x86手册都不能保证任何大于64位的内容的原子性(除了
Why is integer assignment on a naturally aligned variable atomic? 对于规则。违反其中任何一项,你都可以看到撕裂 对于保证的非原子性 全部的 跨越64B边界的SMP系统将始终工作 超级保证始终工作(除了在与当前设计根本不同的CPU设计上):分割1GiB边界,因为这是最大的hugepage大小。(即使2MB hugepage中的4k拆分也算作页面拆分,需要进行两次TLB检查,以确定它们都在同一个hugepage中,并在当前硬件上产生相关的性能损失。当然,任何4k拆分也是缓存线拆分)。
|
![]() |
Rasim Avcı · 如何履行承诺。解析需要原子化的代码 6 年前 |
![]() |
Lingxi · 真正测试std::atomic是否无锁 6 年前 |
![]() |
Rajeev Mehta · 修改和读取原子变量 6 年前 |
![]() |
Chris Jefferson · 在Rust中获得“无序”语义 7 年前 |
![]() |
Jérôme B · redis自动切换值 7 年前 |
![]() |
krimog · 更新where select,保证原子性 7 年前 |