假设在 ARM Cortex-A9 MPCore 实现上分配和访问 32 位整数是原子操作并且分配的值与所有内核同步是否安全? C编译器会保证
uint32_t *p;
*p = 4711;
和
uint32_t *p;
return *p;
在汇编程序中被翻译成原子操作?
最佳答案
“原子”和“与所有内核同步”是不同的要求。市场上的所有 ARM 内核都以原子方式对内存执行 32 位操作(也就是说,您永远看不到写入的单词的“部分”没有其余部分)。 并非它们在核心之间都是缓存一致的,而且细节(尤其是像 big.LITTLE 这样更奇特的配置)很复杂。
使用您的操作系统同步原语。这种复杂性正是它们旨在抽象的内容。
关于c - 在 ARM Cortex-A9 MPCore 上存储/加载原子性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17411704/