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 для других целей?

Спасибо!

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

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