3

假设在 ARM Cortex-A9 MPCore 实现上分配和访问 32 位整数是原子操作并且分配的值与所有内核同步,是否安全?C编译器会保证

uint32_t *p;
*p = 4711;

uint32_t *p;
return *p;

被翻译成汇编器中的原子操作?

4

2 回答 2

4

“原子”和“与所有内核同步”是不同的要求。市场上的所有 ARM 内核都以原子方式对内存执行 32 位操作(也就是说,如果没有其余部分,您永远看不到单词的“部分”)。 并非所有这些在内核之间都是缓存一致的,并且细节(特别是对于像 big.LITTLE 这样更奇特的配置)很复杂。

使用您的操作系统同步原语。这种复杂性就是它们被设计用来抽象的。

于 2013-07-01T19:03:54.010 回答
2

不,这就是 strex/ldrex 的原因。在核心中,普通的 str 和 ldr 很好,但要确保其他核心的访问,您必须使用 strex/ldrex(并具有支持它们的内存系统)。

于 2013-07-01T21:28:54.490 回答