Sdílet prostřednictvím


atomic::compare_exchange_weak – metoda

Provádí operaci slabé atomické porovnání a záměna na *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;

Parametry

  • Exp
    Hodnota typu Ty.

  • Value
    Hodnota typu Ty.

  • Order1
    První argument memory_order.

  • Order2
    Druhý argument memory_order.

Vrácená hodnota

Hodnota bool označuje výsledek porovnání hodnoty.

Poznámky

Tato operace atomického porovnání a záměny porovná hodnotu, která je uložena v *this s hodnotou Exp.Pokud jsou hodnoty stejné, operace nahradí hodnotu uloženou v *this s Val pomocí operace read-modify-write a použitím omezení pořadí paměti, která jsou určena pomocí Order1.Pokud nejsou hodnoty stejné, operace použije hodnotu uloženou v *this k nahrazení Exp a použije omezení pořadí paměti, která jsou určena pomocí Order2.

Slabé atomické operace porovnání a výměny provádějí výměnu, pokud porovnávané hodnoty jsou si rovny.Pokud hodnoty nejsou shodné, není zaručeno provedení výměny operací.

Přetížení, která nemají druhý memory_order, používají implicitní Order2, který je založen na hodnotě Order1.Pokud Order1 je memory_order_acq_rel, Order2 je memory_order_acquire.Pokud Order1 je memory_order_release, Order2 je memory_order_relaxed.Ve všech ostatních případech se Order2 rovná Order1.

Pro přetížení, která berou dva parametry memory_order, hodnota Order2 nesmí být memory_order_release nebo memory_order_acq_rel a nesmí být silnější než hodnota Order1.

Požadavky

Záhlaví: atomic

Obor názvů: std

Viz také

Referenční dokumentace

atomic_compare_exchange_weak_explicit – funkce

atomic – struktura

<atomic>

memory_order