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 последней? Можно /LDXRSTXR инструкции будут переупорядочены? Если они могут, возможно ли для атомарного обновления быть "потерял" при отсутствии барьера? Из того, что япрочитал, это неКажется, что это может произойти, и если это правда, то зачем вамBarrier вариант? Возможно, только если вам тожеDMB для других целей?

Спасибо!

Ответы на вопрос(3)

Ваш ответ на вопрос