- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在看到赫伯·萨特斯出色之后talk关于“原子武器”我对轻松原子示例有点困惑。
我认为C++内存模型中的原子(SC-DRF =无数据竞争的顺序一致)在加载/上进行“获取”阅读。
据我所知,对于加载[和存储],默认值为std::memory_order_seq_cst
,因此两者是相同的:
myatomic.load(); // (1)
myatomic.load(std::memory_order_seq_cst); // (2)
到目前为止一切顺利,没有涉及松弛原子(听完演讲后我永远不会使用松弛原子。永远。保证。但是当有人问我时,我可能必须解释......)。
但为什么我使用时是“宽松”语义
myatomic.load(std::memory_order_acquire); // (3)
既然load是获取并且不是释放,为什么这与(1)
和不同>(2)
? 这里实际上放松了什么?
我唯一能想到的是我误解了加载意味着获取。如果这是真的,并且默认的 seq_cst 意味着两者,那么这是否意味着一个完整的栅栏——没有任何东西可以向上或向下传递该指令?我肯定误解了那部分。
[并且对称地存储和发布]。
最佳答案
调用 myatomic.load(std::memory_order_acquire);
可能会有点困惑“宽松原子”负载,因为有 std::memory_order_relaxed
。有些人描述任何弱于seq_cst
的顺序“放松”。
您注意到顺序一致加载是获取加载是正确的,但它有一个额外的要求:顺序一致加载也是所有 seq_cst 操作的总全局顺序的一部分。
当您处理多个原子变量时,它就会发挥作用:两个原子的单独修改顺序可能会以不同线程的不同相对顺序出现,除非强加顺序一致性。
关于c++ - 宽松的原子规则有什么(轻微)差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17014375/
我有一个关于 app.js 的(宽松的)浏览器安全性的问题,因为我在文档中的某个地方读过(我尝试搜索它但找不到它)。我确实看到有一个可以在这里设置的选项: https://github.com/app
我是一名优秀的程序员,十分优秀!