OSAtomicAdd32
和OSAtomicAdd32Barrier
。我想知道你什么时候需要使用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
在哪些场景下需要后者的Load-Acquire / Store-Release语义?LDXR
/STXR
指令可以被重新排序吗?如果可以,那么在没有屏障的情况下,原子更新是否可能会“丢失”?根据我所读的,似乎不会发生这种情况,如果是这样,那么为什么需要Barrier
变体?也许只有在您还需要DMB
进行其他用途时才需要它?谢谢!