|
|
1
3
[介绍进度]/18:
[原子顺序]/12:
这是一项不具约束力的建议。如果您的实现遵循它们——正如高质量的实现应该遵循的那样——那么您就可以了。否则,你就完蛋了。在这两种情况下,不管使用的内存顺序如何。 C++抽象机器没有“重新排序”的概念。在抽象语义中,主线程存储在原子中,然后被阻塞,因此如果实现使存储在有限的时间内对加载可见,那么另一个线程将在有限的时间内加载该存储值并终止。相反,如果实现出于任何原因不这样做,那么另一个线程将永远循环。使用的记忆顺序是不相关的。 我从来没有发现关于“重新排序”的推理是有用的。它将低级实现细节与高级内存模型混合在一起,并使事情变得更混乱,而不是更少。 |
|
|
2
1
当前翻译单元中定义不可用的任何函数都被视为I/O函数。假定这样的调用会产生副作用,编译器无法将以下语句移动到调用之前或将前面的语句移动到调用之后。
和
在这里
|