CMPXCHG în x86_64: Primitiva Atomică Compare-and-Swap (CAS) în Assembly (x86_64)

Sintaxă
lock cmpxchg dest, src

Instrucțiunea CMPXCHG compară valoarea din acumulator (AL/EAX/RAX) cu operandul destinație. Dacă sunt egale, încarcă valoarea sursă în destinație; altfel, încarcă valoarea destinației în acumulator. Cu prefixul LOCK, stă la baza tuturor structurilor de date lock-free.

; Implementarea Compare-and-Swap atomic pe 64 biți:
; bool cas(int64_t *ptr, int64_t valoare_asteptata, int64_t valoare_noua)
; RDI = ptr, RSI = valoare_asteptata, RDX = valoare_noua

global atomic_compare_and_swap
atomic_compare_and_swap:
    mov rax, rsi                ; Acumulatorul primește valoarea așteptată
    lock cmpxchg [rdi], rdx     ; Dacă [RDI] == RAX, atunci [RDI] = RDX și ZF = 1
    sete al                     ; AL = 1 dacă schimbul a reușit (ZF == 1), altfel 0
    movzx rax, al
    ret

Standardul C++20: Este instrucțiunea nativă din spatele metodelor std::atomic::compare_exchange_weak() și compare_exchange_strong().

Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: CMPXCHG în x86_64: Primitiva Atomică Compare-and-Swap (CAS)

Ai o nelămurire despre utilizarea comenzii CMPXCHG în x86_64: Primitiva Atomică Compare-and-Swap (CAS) sau 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.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.