可以安全地假设在ARM Cortex-A9 MPCore实现上分配和访问32位整数是原子操作,并且分配的值是否与所有内核同步? C编译器会保证
吗?uint32_t *p;
*p = 4711;
和
uint32_t *p;
return *p;
被转换为汇编程序中的原子操作吗?
答案 0 :(得分:4)
“Atomic”和“与所有核心同步”是不同的要求。市场上的所有ARM内核都以原子方式对内存执行32位操作(也就是说,如果没有其余内容,您永远不会看到“写入”部分的“部分”)。 不所有这些都是内核之间的缓存一致性,细节(特别是像big.LITTLE这样更奇特的配置)很复杂。
使用您的操作系统同步原语。这种复杂性是它们旨在抽象的。
答案 1 :(得分:2)
这不是strex / ldrex的原因。在内核中,普通的str和ldr很好,但是为了确保访问其他内核,你必须使用strex / ldrex(并且有一个支持它们的内存系统)。