ARM64: LDXR/STXR vs LDAXR/STLXR

Unter iOS gibt es zwei ähnliche Funktionen OSAtomicAdd32 und OSAtomicAdd32Barrier. Ich bin gespannt, Wann müssen Sie die Barrier Variante.

Demontiert, Sie sind:

_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

In welchen Szenarien würden Sie brauchen, die Last-Erwerben /Store-Release-Semantik des letzteren? Kann LDXR/STXR Anweisungen nachbestellt werden? Wenn Sie können, ist es möglich, dass ein atomarer update "verloren" in dem fehlen einer Barriere? Von dem, was ich gelesen habe, es scheint nicht, wie das geschehen kann, und wenn das stimmt, dann warum würden Sie brauchen, die Barrier Variante? Vielleicht nur, wenn Sie zufällig auch die Notwendigkeit einer DMB für andere Zwecke?

Dank!

InformationsquelleAutor Dave Lee | 2014-02-03
Schreibe einen Kommentar