Condividi tramite


Metodo atomic::compare_exchange_weak

Esegue un'operazione di confronto e scambio atomico debole su *this.

bool compare_exchange_weak(
   Ty& Exp,
   Ty Value,
   memory_order Order1,
   memory_order Order2
) volatile _NOEXCEPT;
bool compare_exchange_weak(
   Ty& Exp,
   Ty Value,
   memory_order Order1,
   memory_order Order2
) _NOEXCEPT;
bool compare_exchange_weak(
   Ty& Exp,
   Ty Value,
   memory_order Order1 = memory_order_seq_cst
) volatile _NOEXCEPT;
bool compare_exchange_weak(
   Ty& Exp,
   Ty Value,
   memory_order Order1 = memory_order_seq_cst
) _NOEXCEPT;

Parametri

  • Exp
    Valore di tipo Ty.

  • Value
    Valore di tipo Ty.

  • Order1
    Primo argomento di memory_order.

  • Order2
    Secondo argomento di memory_order.

Valore restituito

Un bool che indica il risultato del confronto del valore.

Note

Questa operazione di confronto e scambio atomico confronta il valore memorizzato in *this con Exp. Se i valori sono uguali, l'operazione sostituisce il valore archiviato in *this con Val utilizzando un'operazione di read-modify-write e applicando i vincoli di ordine di memoria specificati da Order1. Se i valori non sono uguali, l'operazione utilizza il valore memorizzato in *this per sostituire Exp e applica i vincoli di ordine di memoria specificati da Order2.

Un'operazione di confronto e scambio atomico debole esegue uno scambio se i valori confrontati sono uguali. Se i valori non sono uguali, non è garantito che l'operazione esegua uno scambio.

Overload che non dispongono di un secondo memory_order utilizzano un Order2 implicito basato sul valore di Order1. Se la proprietà Order1 è memory_order_acq_rel, la proprietà Order2 è memory_order_acquire. Se la proprietà Order1 è memory_order_release, la proprietà Order2 è memory_order_relaxed. In tutti gli altri casi, Order2 è uguale a Order1.

Per gli overload che accettano due parametri memory_order, il valore di Order2 non deve essere memory_order_release o memory_order_acq_rel e non deve essere più forte del valore Order1.

Requisiti

Intestazione: atomico

Spazio dei nomi: std

Vedere anche

Riferimenti

Funzione atomic_compare_exchange_weak_explicit

Struttura atomic

<atomic>

memory_order