Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ARM Cortex-A9 MPCore上存储/加载原子性_C_Assembly_Arm - Fatal编程技术网

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

在ARM Cortex-A9 MPCore上存储/加载原子性,c,assembly,arm,C,Assembly,Arm,假设在ARM Cortex-A9 MPCore实现上分配和访问32位整数是原子操作,并且分配的值与所有内核同步,安全吗?C编译器能保证吗 uint32_t *p; *p = 4711; 及 是否在汇编程序中转换为原子操作?“原子”和“与所有内核同步”是不同的要求。市场上所有的ARM内核都以原子方式对内存执行32位操作(也就是说,如果没有其余部分,你永远看不到单词的“部分”)不是所有这些都是核心之间的缓存一致性,细节(尤其是像big.LIGHT这样更奇特的配置)非常复杂 使用操作系统同步原语。这

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

uint32_t *p;
*p = 4711;

是否在汇编程序中转换为原子操作?

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


使用操作系统同步原语。这种复杂性是他们设计用来抽象的。

不,这就是strex/ldrex的原因。在内核中,正常的str和ldr是可以的,但为了确保对其他内核的访问,您必须使用strex/ldrex(并有一个支持它们的内存系统)。

您可以随时分解对象文件并自己检查。@JoachimPileborg,永远不要这样做。结果可能会从一个生成配置更改为另一个生成配置。
uint32_t *p;
return *p;