Questions tagged «as-if»

3
“假设”规则到底是什么?
如标题所示, “假设”规则到底是什么? 一个典型的答案是: 允许任何和所有代码转换而不会改变程序可观察行为的规则 我们会不时地从某些实现中获得归因于该规则的行为。很多次是错误的。所以,这条规则到底是什么。该标准没有明确提及该规则的一部分或段落,那么该规则的作用范围到底是什么?对我来说,这似乎是一个灰色区域,该标准未对其进行详细定义。有人可以引用标准的参考文献来详细说明细节吗? 注意:将此标记为C和C ++,因为它与两种语言都相关。
89 c++  c  optimization  c++-faq  as-if 


4
cppreference中对宽松顺序的解释是否错误?
在cppreference.com的文档中std::memory_order,有一个宽松订购的示例: 轻松订购 带标签的原子操作memory_order_relaxed不是同步操作;它们不会在并发内存访问之间强加顺序。它们仅保证原子性和修改顺序的一致性。 例如,如果x和y最初为零, // Thread 1: r1 = y.load(std::memory_order_relaxed); // A x.store(r1, std::memory_order_relaxed); // B // Thread 2: r2 = x.load(std::memory_order_relaxed); // C y.store(42, std::memory_order_relaxed); // D 被允许以产生R1 == R2 == 42,因为尽管A被测序-之前线程1中B和C 之前测序线程2内d,没有什么阻止由在y的修改次序出现A之前D和B,从按x的修改顺序出现在C之前。D在y上的副作用对于线程1中的负载A可见,而B在x上的副作用对于线程2中的负载C可见。特别是,如果D在C in之前完成,则可能发生这种情况。线程2,由于编译器重新排序或在运行时。 它说:“在线程2中,C在D之前被排序”。 根据可以在评估顺序中找到的按顺序排序的定义,如果A在B之前排序,则A的评估将在B的评估开始之前完成。由于C在线程2中在D之前被排序,因此C必须在D开始之前完成,因此快照的最后一句的条件部分将永远无法满足。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.