使用ARM Thumb指令集时,访问(加载/存储)32位整数是原子的吗?

时间:2011-06-17 15:53:40

标签: arm thumb

使用带有拇指指令集和Keil realview编译器的ARM cortex,访问32位整数是否安全?由于拇指寄存器组是16位,这是否意味着,获取32位int需要2个机器指令?如果是这样,访问32位将不是原子的。如果我的担心是真的,那是否意味着int赋值应该受到关键区域的保护?

2 个答案:

答案 0 :(得分:1)

Thumb使用与ARM相同的32位寄存器,因此没有问题。减少的是指令大小(即使对于Thumb-2来说也不严格如此)。

不用担心,如果您正在编译Thumb,则无需更改代码。

答案 1 :(得分:0)

指令大小在拇指模式下是16位,而不是寄存器大小。

这意味着常量赋值 - 如i=1; - 可被视为原子。尽管生成了多条指令,但即使ii,也只有一条指令会修改int32_t的内存位置。

但是,对于像i=i+1这样的事情,你需要一个关键部分。那当然不是原子的。