ARM64: LDXR / STXR против LDAXR / STLXR
На iOS есть две похожие функции,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
для других целей?
Спасибо!