在ARM Cortex-A9 MPCore上存储/加载原子性

时间:2013-07-01 18:58:51

标签: c assembly arm

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

吗?
uint32_t *p;
*p = 4711;

uint32_t *p;
return *p;

被转换为汇编程序中的原子操作吗?

2 个答案:

答案 0 :(得分:4)

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

使用您的操作系统同步原语。这种复杂性是它们旨在抽象的。

答案 1 :(得分:2)

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