Condividi tramite


metodo atomic::compare_exchange_strong

Esegue un confronto in modalità atomica e scambio l'operazione in *this.

bool compare_exchange_strong(
   Ty& Exp,
   Ty Value,
   memory_order Order1,
   memory_order Order2
) volatile _NOEXCEPT;
bool compare_exchange_strong(
   Ty& Exp,
   Ty Value,
   memory_order Order1,
   memory_order Order2
) _NOEXCEPT;
bool compare_exchange_strong(
   Ty& Exp,
   Ty Value,
   memory_order Order1 = memory_order_seq_cst
) volatile _NOEXCEPT;
bool compare_exchange_strong(
   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 memory_order.

  • Order2
    Secondo argomento memory_order.

Valore restituito

bool che indica il risultato del confronto di valore.

Note

Questo seguito vengono confrontate e l'operazione di scambio confronta il valore memorizzato in *this con Exp.Se i valori sono uguali, l'operazione sostituisce il valore memorizzato in *this con Val tramite un'operazione read-modify-write e applicazione di vincoli ordine di memoria specificate 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 specificate da Order2.

Overload di che non hanno un utilizzo memory_order di secondo Order2 implicito basato sul valore 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 Order2 non deve essere memory_order_release o memory_order_acq_rele non deve essere più sicura del valore Order1.

Requisiti

intestazione: atomico

Spazio dei nomi: deviazione standard

Vedere anche

Riferimenti

funzione atomic_compare_exchange_strong_explicit

struttura atomica

<atomic>

memory_order