Instrucțiunea XADD (Exchange and Add) interschimbă prima valoare cu a doua și apoi salvează suma lor în destinație. În combinație cu prefixul LOCK, realizează operația fetch-and-add atomică fără bucle de reîncercare.
; Incrementare atomică a unui contor partajat în multithreading:
; int64_t atomic_fetch_add(int64_t *ptr, int64_t valoare)
; RDI = adresa contorului, RSI = valoarea de adăugat
global atomic_fetch_add
atomic_fetch_add:
mov rax, rsi ; RAX conține valoarea adăugată
lock xadd [rdi], rax ; [RDI] = [RDI] + RAX, iar RAX primește valoarea VECHE din memorie
; RAX conține valoarea anterioară operației (fetch_and_add)
ret
Aplicație: Esențială pentru alocatoare de memorie concurente, cozi lock-free (Michael-Scott queue) și gestionarea identificatorilor de sesiune unici.
Întrebări & Exemple de Cod:
Instrucțiunea XADD în x86_64: Schimb și Adunare Atomică pentru ContoareAi o nelămurire despre utilizarea comenzii
Instrucțiunea XADD în x86_64: Schimb și Adunare Atomică pentru Contoaresau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.