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

标签 c assembly arm

假设在 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/

相关文章:

C++ ASM Inline如何在ASM中使用struct成员?

c++ - 节能自旋环

c - 函数序言中的 `PUSH 0xFFFFFFFF` 是什么意思?

c++ - 重定向文件访问

c - ANSI C,没有可变参数函数的整数到字符串

c - 如何在汇编程序中使用 C 库?

linux - aarch64 Linux 硬 float 或软 float

c - Linux/ARM "kuser_helper"函数的运行时检测

c - 按位运算符比较错误

c - Linux 中 WaitForSingleObject() 和 ResetEvent() 的等效性