[英]Store/load atomicity on ARM Cortex-A9 MPCore
假设在ARM Cortex-A9 MPCore实现上分配和访问32位整数是原子操作并且指定的值与所有内核同步是否安全? C编译器会保证吗?
uint32_t *p;
*p = 4711;
和
uint32_t *p;
return *p;
是汇编程序中的原子操作?
“原子”和“与所有核心同步”是不同的要求。 市场上的所有ARM内核都以原子方式对内存执行32位操作(也就是说,如果没有其余内容,您永远不会看到“写入”部分的“部分”)。 并非所有这些都是内核之间的缓存一致性,细节(特别是像big.LITTLE这样更奇特的配置)很复杂。
使用您的OS同步原语。 这种复杂性是它们旨在抽象的。
不,这就是strex / ldrex的原因。 在内核中,正常的str和ldr很好,但是为了确保访问其他内核,你必须使用strex / ldrex(并且有一个支持它们的内存系统)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.