1
4
C++内存模型的行为不像你想象的那样。例如,它具有内存位置,但引用N47 13草案部分第3款:
因此,通过C++内存模型,在不同线程中的两个不同的对象永远不会被认为具有相同的内存位置,即使在物理机器级别上,在另一个RAM被分配后,在相同的RAM中分配一个。 通过C++内存模型,你问的情况不是数据竞争。实现必须采取任何必要的步骤来确保这是安全的,不管硬件的内存模型如何。 |
2
2
物理机器的“相同地址”对C++内存模型是不可抵抗性的。C++内存模型谈论抽象机器的行为。抽象机器中的地址基本上是不可比拟的,即使它们在不同的时间有相同的机器地址。 C++抽象机中的竞争条件谈论的是它的操作,而不是物理机器上的操作。编译器的任务是确保C++代码的抽象机器行为的物理机器实现是一致的。
如果它做了一些奇怪的事情,比如在线程之间重用堆栈地址空间,那么它会做任何它必须做的事情,以保持访问抽象机中不相关变量的竞争条件的缺乏。这些都不发生在C++代码级别;没有C++代码(除了可能在
|