Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Estrutura
Descreve um objeto que executa operações atomic em um valor armazenado do tipo Ty.
Sintaxe
template <class Ty>
struct atomic;
Membros
| Membro | Descrição |
|---|---|
| Construtor | |
atomic |
Constrói um objeto atômico. |
| Operadores | |
atomic::operator Ty |
Lê e retorna o valor armazenado. (atomic::load) |
atomic::operator= |
Usa um valor especificado para substituir o valor armazenado. (atomic::store) |
atomic::operator++ |
Incrementa o valor armazenado. Usado somente por especializações integrais e de ponteiro. |
atomic::operator+= |
Adiciona um valor especificado ao valor armazenado. Usado somente por especializações integrais e de ponteiro. |
atomic::operator-- |
Diminui o valor armazenado . Usado somente por especializações integrais e de ponteiro. |
atomic::operator-= |
Subtrai um valor especificado do valor armazenado. Usado somente por especializações integrais e de ponteiro. |
atomic::operator&= |
Executa um "and" (&) bit a bit em um valor especificado e no valor armazenado. Usado somente por especializações integrais. |
atomic::operator|= |
Executa um "or" (|) bit a bit em um valor especificado e no valor armazenado. Usado somente por especializações integrais. |
atomic::operator^= |
Executa um "exclusive or" (^) bit a bit em um valor especificado e no valor armazenado. Usado somente por especializações integrais. |
| Funções | |
compare_exchange_strong |
Executa uma operação atomic_compare_and_exchange em this e retorna o resultado. |
compare_exchange_weak |
Executa uma operação weak_atomic_compare_and_exchange em this e retorna o resultado. |
fetch_add |
Adiciona um valor especificado ao valor armazenado. |
fetch_and |
Executa um "and" (&) bit a bit em um valor especificado e no valor armazenado. |
fetch_or |
Executa um "or" (|) bit a bit em um valor especificado e no valor armazenado. |
fetch_sub |
Subtrai um valor especificado do valor armazenado. |
fetch_xor |
Executa um "exclusive or" (^) bit a bit em um valor especificado e no valor armazenado. |
is_lock_free |
Especifica se operações atomic em this são livres de bloqueio. Um tipo atomic será livre de bloqueio se nenhuma operação atomic nesse tipo usar bloqueios. |
load |
Lê e retorna o valor armazenado. |
store |
Usa um valor especificado para substituir o valor armazenado. |
Comentários
O tipo Ty deve ser facilmente copiado. Ou seja, usar memcpy para copiar seus bytes deve produzir um objeto Ty válido comparável ao objeto original. As funções membro compare_exchange_weak e compare_exchange_strong usam memcmp para determinar se dois valores Ty são iguais. Essas funções não usarão um operator== definido por Ty. As funções membro de atomic usam memcpy para copiar valores do tipo Ty.
Uma especialização parcial, atomic<Ty*>, existe para todos os tipos de ponteiro. A especialização permite a adição de um deslocamento para o valor do ponteiro gerenciado ou subtração de um deslocamento dele. Operações aritméticas obtêm um argumento do tipo ptrdiff_t e ajustam esse argumento de acordo com o tamanho de Ty para serem consistentes com endereço comum aritmético.
Existe uma especialização para cada tipo integral, exceto bool. Cada especialização fornece um rico conjunto de métodos para operações aritméticas e lógicas atômicas.
atomic<char>
atomic<signed char>
atomic<unsigned char>
atomic<char16_t>
atomic<char32_t>
atomic<wchar_t>
atomic<short>
atomic<unsigned short>
atomic<int>
atomic<unsigned int>
atomic<long>
atomic<unsigned long>
atomic<long long>
atomic<unsigned long long>
Especializações integrais são derivadas de tipos atomic_integral correspondentes. Por exemplo, atomic<unsigned int> é derivado de atomic_uint.
Requisitos
Cabeçalho: <atomic>
Namespace: std
atomic::atomic
Constrói um objeto atômico.
atomic();
atomic( const atomic& );
atomic( Ty Value ) noexcept;
Parâmetros
Value
Valor de inicialização.
Comentários
Objetos atômicos não podem ser copiados nem movidos.
Objetos que são instanciações de atomic<Ty> podem ser inicializados apenas pelo construtor que usa um argumento do tipo Ty, e não usando a inicialização agregada. No entanto, objetos atomic_integral só podem ser inicializados usando a inicialização agregada.
atomic<int> ai0 = ATOMIC_VAR_INIT(0);
atomic<int> ai1(0);
atomic::operator Ty
O operador do tipo especificado para o modelo, atomic<Ty>. Recupera o valor armazenado em *this.
atomic<Ty>::operator Ty() const volatile noexcept;
atomic<Ty>::operator Ty() const noexcept;
Comentários
Esse operador aplica o memory_order_seq_cst memory_order.
atomic::operator=
Armazena um valor especificado.
Ty operator=(
Ty Value
) volatile noexcept;
Ty operator=(
Ty Value
) noexcept;
Parâmetros
Value
Um objeto Ty.
Valor de retorno
Retorna Value.
atomic::operator++
Incrementa o valor armazenado. Usado somente por especializações integrais e de ponteiro.
Ty atomic<Ty>::operator++(int) volatile noexcept;
Ty atomic<Ty>::operator++(int) noexcept;
Ty atomic<Ty>::operator++() volatile noexcept;
Ty atomic<Ty>::operator++() noexcept;
Valor de retorno
Os dois primeiros operadores retornam o valor incrementado. Os dois últimos operadores retornam o valor antes do incremento. Os operadores usam o memory_order_seq_cst memory_order.
atomic::operator+=
Adiciona um valor especificado ao valor armazenado. Usado somente por especializações integrais e de ponteiro.
Ty atomic<Ty>::operator+=(
Ty Value
) volatile noexcept;
Ty atomic<Ty>::operator+=(
Ty Value
) noexcept;
Parâmetros
Value
Um valor integral ou de ponteiro.
Valor de retorno
Um objeto Ty que contém os resultados da soma.
Comentários
Esse operador usa o memory_order_seq_cst memory_order.
atomic::operator--
Diminui o valor armazenado . Usado somente por especializações integrais e de ponteiro.
Ty atomic<Ty>::operator--(int) volatile noexcept;
Ty atomic<Ty>::operator--(int) noexcept;
Ty atomic<Ty>::operator--() volatile noexcept;
Ty atomic<Ty>::operator--() noexcept;
Valor de retorno
Os dois primeiros operadores retornam o valor reduzido. Os dois últimos operadores retornam o valor antes da redução. Os operadores usam o memory_order_seq_cst memory_order.
atomic::operator-=
Subtrai um valor especificado do valor armazenado. Usado somente por especializações integrais e de ponteiro.
Ty atomic<Ty>::operator-=(
Ty Value
) volatile noexcept;
Ty atomic<Ty>::operator-=(
Ty Value
) noexcept;
Parâmetros
Value
Um valor integral ou de ponteiro.
Valor de retorno
Um objeto Ty que contém os resultados da subtração.
Comentários
Esse operador usa o memory_order_seq_cst memory_order.
atomic::operator&=
Executa um "and" (&) bit a bit em um valor especificado e no valor armazenado de *this. Usado somente por especializações integrais.
atomic<Ty>::operator&= (
Ty Value
) volatile noexcept;
atomic<Ty>::operator&= (
Ty Value
) noexcept;
Parâmetros
Value
Um valor do tipo Ty.
Valor de retorno
O resultado do "and" bit a bit (&).
Comentários
Esse operador executa uma operação de leitura-modificação-gravação para substituir o valor armazenado de *this por um bit a bit "e" (&) de Value e o valor atual armazenado em *this, dentro das restrições do memory_order_seq_cst memory_order.
atomic::operator|=
Executa um "or" (|) bit a bit em um valor especificado e no valor armazenado de *this. Usado somente por especializações integrais.
atomic<Ty>::operator|= (
Ty Value
) volatile noexcept;
atomic<Ty>::operator|= (
Ty Value
) noexcept;
Parâmetros
Value
Um valor do tipo Ty.
Valor de retorno
O resultado do "or" bit a bit (|).
Comentários
Esse operador executa uma operação de leitura-modificação-gravação para substituir o valor armazenado de *this por um bit a bit "ou" (|) de Value e o valor atual armazenado em *this, dentro das restrições das memory_order_seq_cst memory_order restrições.
atomic::operator^=
Executa um "exclusive or" (^) bit a bit em um valor especificado e no valor armazenado de *this. Usado somente por especializações integrais.
atomic<Ty>::operator^= (
Ty Value
) volatile noexcept;
atomic<Ty>::operator^= (
Ty Value
) noexcept;
Parâmetros
Value
Um valor do tipo Ty.
Valor de retorno
O resultado do "exclusive or" (^) bit a bit.
Comentários
Esse operador executa uma operação de leitura-modificação-gravação para substituir o valor armazenado de *this por um bit a bit "exclusive or" (^) de Value e o valor atual armazenado em *this, dentro das restrições das memory_order_seq_cst memory_order restrições.
atomic::compare_exchange_strong
Executa uma operação atômica de comparação e troca em *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;
Parâmetros
Exp
Um valor do tipo Ty.
Value
Um valor do tipo Ty.
Order1
Primeiro argumento memory_order.
Order2
Segundo argumento memory_order.
Valor de retorno
Um bool que indica o resultado da comparação de valor.
Comentários
Essa operação atômica de comparação e troca compara o valor armazenado em *this com Exp. Se os valores forem iguais, a operação substituirá o valor armazenado em *this por Value usando uma operação de leitura, alteração e gravação e aplicando as restrições de ordem de memória especificadas por Order1. Se os valores não forem iguais, a operação usará o valor armazenado em *this para substituir Exp e aplicará as restrições de ordem de memória especificadas por Order2.
Sobrecargas que não têm um segundo memory_order usam um Order2 implícito baseado no valor de Order1. Se Order1 for memory_order_acq_rel, Order2 é memory_order_acquire. Se Order1 for memory_order_release, Order2 é memory_order_relaxed. Em todos os outros casos, Order2 é igual a Order1.
Para sobrecargas que usam dois parâmetros memory_order, o valor de Order2 não poderá ser memory_order_release ou memory_order_acq_rel e não deverá ser mais forte do que o valor de Order1.
atomic::compare_exchange_weak
Executa uma operação atômica de comparação e troca fraca 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 do tipo Ty.
Value
Um valor do tipo Ty.
Order1
Primeiro argumento memory_order.
Order2
Segundo argumento memory_order.
Valor de retorno
Um bool que indica o resultado da comparação de valor.
Comentários
Essa operação atômica de comparação e troca compara o valor armazenado em *this com Exp. Se os valores forem iguais, a operação substituirá o valor armazenado em *this por Value usando uma operação de leitura, alteração e gravação e aplicando as restrições de ordem de memória especificadas por Order1. Se os valores não forem iguais, a operação usará o valor armazenado em *this para substituir Exp e aplicará as restrições de ordem de memória especificadas por Order2.
Uma operação de comparar e trocar atômica fraca executará uma troca se os valores comparados forem iguais. Se os valores não forem iguais, não haverá garantia de que a operação executará uma troca.
Sobrecargas que não têm um segundo memory_order usam um Order2 implícito baseado no valor de Order1. Se Order1 for memory_order_acq_rel, Order2 é memory_order_acquire. Se Order1 for memory_order_release, Order2 é memory_order_relaxed. Em todos os outros casos, Order2 é igual a Order1.
Para sobrecargas que usam dois parâmetros memory_order, o valor de Order2 não poderá ser memory_order_release ou memory_order_acq_rel e não deverá ser mais forte do que o valor de Order1.
atomic::exchange
Usa um valor especificado para substituir o valor armazenado de *this.
Ty atomic<Ty>::exchange(
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::exchange(
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
Parâmetros
Value
Um valor do tipo Ty.
Order
Um memory_order.
Valor de retorno
O valor armazenado de *this antes da troca.
Comentários
A operação executa uma operação de leitura, alteração e gravação para usar Value para substituir o valor armazenado em *this, dentro das restrições de memória especificadas por Order.
atomic::fetch_add
Busca o valor armazenado em *this e adiciona um valor especificado ao valor armazenado.
Ty atomic<Ty>::fetch_add (
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_add (
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
Parâmetros
Value
Um valor do tipo Ty.
Order
Um memory_order.
Valor de retorno
Um objeto Ty que contém o valor armazenado em *this antes da adição.
Comentários
O método fetch_add executa uma operação de leitura, alteração e gravação para adicionar atomicamente Value ao valor armazenado em *this e aplica as restrições de memória especificadas por Order.
atomic::fetch_and
Executa um "and" (&) bit a bit em um valor e em um valor existente armazenado em *this.
Ty atomic<Ty>::fetch_and (
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_and (
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
Parâmetros
Value
Um valor do tipo Ty.
Order
Um memory_order.
Valor de retorno
Um objeto Ty que contém o resultado do "and" bit a bit (&).
Comentários
O método fetch_and executa uma operação de leitura, alteração e gravação para substituir o valor armazenado de *this por um "and" bit a bit (&) de Value e o valor atual armazenado em *this, dentro das restrições de memória especificadas por Order.
atomic::fetch_or
Executa um "or" (|) bit a bit em um valor e em um valor existente armazenado em *this.
Ty atomic<Ty>::fetch_or (
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_or (
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
Parâmetros
Value
Um valor do tipo Ty.
Order
Um memory_order.
Valor de retorno
Um objeto Ty que contém o resultado do "or" bit a bit (|).
Comentários
O método fetch_or executa uma operação de leitura, alteração e gravação para substituir o valor armazenado de *this por um "or" bit a bit (|) de Value e o valor atual armazenado em *this, dentro das restrições de memória especificadas por Order.
atomic::fetch_sub
Subtrai um valor especificado do valor armazenado.
Ty atomic<Ty>::fetch_sub (
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_sub (
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
Parâmetros
Value
Um valor do tipo Ty.
Order
Um memory_order.
Valor de retorno
Um objeto Ty que contém os resultados da subtração.
Comentários
O método fetch_sub executa uma operação de leitura, alteração e gravação para subtrair atomicamente Value ao valor armazenado em *this, dentro das restrições de memória especificadas por Order.
atomic::fetch_xor
Executa um "exclusive or" (^) bit a bit em um valor e em um valor existente armazenado em *this.
Ty atomic<Ty>::fetch_xor (
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_xor (
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
Parâmetros
Value
Um valor do tipo Ty.
Order
Um memory_order.
Valor de retorno
Um objeto Ty que contém o resultado do "exclusive or" bit a bit (^).
Comentários
O método fetch_xor executa uma operação de leitura, alteração e gravação para substituir o valor armazenado de *this por um "exclusive or" bit a bit (^) de Value e o valor atual armazenado em *this, e aplica as restrições de memória especificadas por Order.
atomic::is_lock_free
Especifica se operações atomic em *this são livres de bloqueio.
bool is_lock_free() const volatile noexcept;
Valor de retorno
true se operações atomic em *this estiverem livres de bloqueio; caso contrário, false.
Comentários
Um tipo atomic será livre de bloqueio se nenhuma operação atomic nesse tipo usar bloqueios.
atomic::load
Recupera o valor armazenado em *this, dentro das restrições de memória especificadas.
Ty atomic::load(
memory_order Order = memory_order_seq_cst
) const volatile noexcept;
Ty atomic::load(
memory_order Order = memory_order_seq_cst
) const noexcept;
Parâmetros
Order
Um memory_order. Order não pode ser memory_order_release nem memory_order_acq_rel.
Valor de retorno
O valor recuperado armazenado em *this.
atomic::store
Armazena um valor especificado.
void atomic<Ty>::store(
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
void atomic<Ty>::store(
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
Parâmetros
Value
Um objeto Ty.
Order
Uma restrição memory_order.
Comentários
Essa função membro armazena atomicamente Value em *this, dentro das restrições de memória especificadas por Order.