ARM: 写入/读取整数是否是原子操作?

14

在 ARM 架构上,不幸的是我不知道具体是哪个芯片,它是否支持 32 位整数的原子读写?

对于基本类型的读/写操作,有没有任何保证?


如果该“int”适当地对齐(到4个字节),我猜想,像大多数32位处理器一样,写入应该是以某种方式原子化的。然而,真正的问题在于内存模型(特别是在多核情况下:缓存一致性等)。 - Basile Starynkevitch
即使没有缓存一致性,对主内存的读写仍然是原子性的(但会有延迟)。 - Johan Kotlinski
@BasileStarynkevitch 是的,内存模型是一个很好的观点,但我只有一颗带有一个核心的ARM处理器。 - Tony The Lion
是的,它是原子性的(除了可能在紧凑结构中)。请参阅我的完整答案,包括所有其他数据类型,链接在这里:https://dev59.com/o1QJ5IYBdhLWcg3w8ajH#52785864。 - Gabriel Staples
1个回答

12

如果该整数存储在非对齐地址上,则应该具有原子性。


2
检查其地址模4是否为0。虽然如果你没有做任何奇怪的事情(如类型转换等),那么编译器会使其对齐。 - jjlin
3
实际上,像Cortex-M3这样的一些ARM处理器支持硬件未对齐访问,因此即使未对齐的读/写也是原子操作。访问可能跨越多个总线周期到内存,但没有机会让另一个指令在其中间插入,所以程序员认为它是原子的。 - TJD
2
据我最近的检查,ARM不支持未对齐访问。无论如何,这个问题被标记为C语言,并且未对齐访问是非法的C语言(未定义行为)。 - R.. GitHub STOP HELPING ICE
2
@TJD,你忽略了处理器/核之间的共享内存。当当前处理器连接部件时,另一个处理器可能会更改数据。 - ugoren
1
@TonyTheLion 关于紧缩结构体怎么处理? - Guido
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接