标签列表
ARM: 写入/读取整数是否是原子操作?
c
arm
atomic
14
14
在 ARM 架构上,不幸的是我不知道具体是哪个芯片,它是否支持 32 位整数的原子读写?
对于基本类型的读/写操作,有没有任何保证?
-
Tony The Lion
4
如果该“int”适当地对齐(到4个字节),我猜想,像大多数32位处理器一样,写入应该是以某种方式原子化的。然而,真正的问题在于内存模型(特别是在多核情况下:缓存一致性等)。
- Basile Starynkevitch
即使没有缓存一致性,对主内存的读写仍然是原子性的(但会有延迟)。
- Johan Kotlinski
@BasileStarynkevitch 是的,内存模型是一个很好的观点,但我只有一颗带有一个核心的ARM处理器。
- Tony The Lion
是的,它是原子性的(除了可能在紧凑结构中)。请参阅我的完整答案,包括所有其他数据类型,链接在这里:https://dev59.com/o1QJ5IYBdhLWcg3w8ajH#52785864。
- Gabriel Staples
1
个回答
12
12
如果该整数存储在非对齐地址上,则应该具有原子性。
-
Johan Kotlinski
7
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 提供, 点击上面的
可以查看英文原文,
原文链接
相关问题
4
在iOS/ARM平台上,哪些整数操作是原子的?
25
在JavaScript中,增量操作是否是原子操作?
3
读取/写入管道是否是一项昂贵的操作?
3
比较操作是否是原子操作?
21
ARM中的原子操作
3
比较两个整数是否是原子操作?
5
ARM: “STMDB SP!,{R0-R8}”(也称为PUSH {R0-R8})是否是原子操作?
6
ARM原子性操作的性能
3
写入SOCK_SEQPACKET是原子操作吗?
33
+=、|=、&=等操作是否是原子操作?