小编Dav*_*Lee的帖子

ARM64:LDXR/STXR与LDAXR/STLXR

在iOS上,有两个类似的功能,OSAtomicAdd32OSAtomicAdd32Barrier.我想知道你什么时候需要Barrier变种.

拆卸后,它们是:

_OSAtomicAdd32:
ldxr    w8, [x1]
add     w8, w8, w0
stxr    w9, w8, [x1]
cbnz    w9, _OSAtomicAdd32
mov     x0, x8
ret     lr

_OSAtomicAdd32Barrier:
ldaxr   w8, [x1]
add     w8, w8, w0
stlxr   w9, w8, [x1]
cbnz    w9, _OSAtomicAdd32Barrier
mov     x0, x8
ret     lr
Run Code Online (Sandbox Code Playgroud)

在哪种情况下,您需要后者的Load-Acquire/Store-Release语义?可以LDXR/ STXR指令重新排序吗?如果可以,原子更新是否有可能在没有障碍的情况下"丢失"?从我所读到的,似乎不会发生这种情况,如果是真的,那你为什么需要这个Barrier变体呢?也许只有你碰巧还需要一个DMB其他目的?

谢谢!

arm atomic arm64

7
推荐指数
2
解决办法
5705
查看次数

标签 统计

arm ×1

arm64 ×1

atomic ×1