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