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