Método atomic::compare_exchange_weak
Executa um atômico fraco comparam e trocam a operação em *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;
Parâmetros
Exp
Um valor de tipo Ty.Value
Um valor de tipo Ty.Order1
Primeiro argumento de memory_order .Order2
Segundo argumento de memory_order .
Valor de retorno
bool que indica o resultado de comparação de valores.
Comentários
Esta operação comparação e troca atômica compara o valor que é armazenado em *this com Exp.Se os valores forem iguais, a operação substitui o valor que é armazenado em *this com Val usando uma operação de read-modify-write e aplicando as restrições de ordem de memória que são especificadas por Order1.Se os valores não são iguais, a operação usa o valor que é armazenado em *this para substituir Exp e aplica as restrições de ordem de memória que são especificadas por Order2.
Um atômico fraco compara e a operação de troca executa uma troca se os valores são comparados iguais.Se os valores não são iguais, a operação não é garantida para executar uma troca.
Sobrecargas que não têm um uso de memory_order do segundo Order2 implícito que é baseado no valor de Order1.Se Order1 é memory_order_acq_rel, Order2 é memory_order_acquire.Se Order1 é memory_order_release, Order2 é memory_order_relaxed.Em todos os outros casos, Order2 é igual a Order1.
Para sobrecargas que usam dois parâmetros de memory_order , o valor de Order2 não deve ser memory_order_release ou memory_order_acq_rel, e não deve ser mais segura do que o valor de Order1.
Requisitos
Cabeçalho: atômico
namespace: STD