Partilhar via


<atomic>

Define classes e classes de modelo para usar o para criar tipos que oferecem suporte a operações atômicas.

#include <atomic>

Comentários

ObservaçãoObservação

Em o código que é criado usando /clr ou /clr:pure, este cabeçalho é bloqueado.

Uma operação atomic chave tem duas propriedades que ajudam a usar vários segmentos para manipular corretamente um objeto sem usar bloqueios mutex.

  • Porque é uma operação atomic indivisível, uma segunda operação atomic de um objeto no mesmo segmento diferente pode obter o estado do objeto apenas antes ou após a primeira. operação atomic

  • Baseado em seu argumento de memory_order , estabelece uma operação atomic ordenação requisitos para a visibilidade dos efeitos de outras operações atômicas no mesmo segmento.Portanto, inibe as otimizações de compilador que viola os requisitos classificação.

Em algumas plataformas, talvez não seja possível implementar operações com eficiência atômicas para alguns tipos de bloqueios sem usar mutex .Um é livre de tipo atômico se qualquer operação atomic uso de em aquele tipo bloqueia.

A classe atomic_flag fornece um tipo atômico mínimo que contém um sinalizador de bool .As operações são sempre bloqueio- livres.

A classe atomic<Ty> de modelo armazena um objeto do tipo de argumento Ty e fornece acesso atômico ao valor armazenado.Você pode criar uma instância de usando qualquer tipo que possa ser copiado usando memcpy e testado para igualdade usando memcmp.Em particular, você pode usá-lo com tipos definidos pelo usuário que atendem aos requisitos e, em muitos casos, com tipos de ponto flutuante.

O modelo também tem um conjunto de especializações para tipos integrais e uma especialização parcial para ponteiros.Essas especializações fornecem as operações adicionais que não estão disponíveis através do modelo primária.

Especializações ponteiro

As especializações parciais de atomic<Ty *> aplicam-se a todos os tipos ponteiro.Fornece métodos para aritmética do ponteiro.

especializações integrais

as especializações de atomic<integral> aplicam-se a todos os tipos integrais.Fornece operações extras que não estão disponíveis através do modelo primária.

Cada tipo de atomic<integral> tem uma macro correspondente que você possa usar em if directive para determinar em tempo de compilação se as operações em esse tipo são livres bloqueio-.Se o valor de macro é zero, operações no tipo não são bloqueio- livres.Se o valor for 1, as operações podem ser bloqueio- livre, e uma verificação de tempo de execução é necessária.Se o valor for 2, operações são bloqueio- livres.Você pode usar a função para determinar atomic_is_lock_free em tempo de execução se as operações no tipo bloqueio- são livres.

Para cada um dos tipos integrais, há um tipo atômico chamado correspondente que gerencia um objeto do tipo integral.Cada tipo de atomic_integral tem o mesmo conjunto de funções de membro que a instanciação correspondente de atomic<Ty> e pode ser passado para algumas das funções não atômicas de membro.

tipo deatomic_integral

tipo integral

macro deatomic_is_lock_free

atomic_char

char

ATOMIC_CHAR_LOCK_FREE

atomic_schar

signed char

ATOMIC_CHAR_LOCK_FREE

atomic_uchar

unsigned char

ATOMIC_CHAR_LOCK_FREE

atomic_char16_t

char16_t

ATOMIC_CHAR16_T_LOCK_FREE

atomic_char32_t

char32_t

ATOMIC_CHAR32_T_LOCK_FREE

atomic_wchar_t

wchar_t

ATOMIC_WCHAR_T_LOCK_FREE

atomic_short

short

ATOMIC_SHORT_LOCK_FREE

atomic_ushort

unsigned short

ATOMIC_SHORT_LOCK_FREE

atomic_int

int

ATOMIC_INT_LOCK_FREE

atomic_uint

unsigned int

ATOMIC_INT_LOCK_FREE

atomic_long

long

ATOMIC_LONG_LOCK_FREE

atomic_ulong

unsigned long

ATOMIC_LONG_LOCK_FREE

atomic_llong

long long

ATOMIC_LLONG_LOCK_FREE

atomic_ullong

unsigned long long

ATOMIC_LLONG_LOCK_FREE

Os nomes de Typedef existem para especializações de modelo atômico para alguns dos tipos que são definidos no cabeçalho <inttypes.h>.

tipo atômico

nome de Typedef

atomic_int8_t

atomic<int8_t>

atomic_uint8_t

atomic<uint8_t>

atomic_int16_t

atomic<int16_t>

atomic_uint16_t

atomic<uint16_t>

atomic_int32_t

atomic<int32_t>

atomic_uint32_t

atomic<uint32_t>

atomic_int64_t

atomic<int64_t>

atomic_uint64_t

atomic<uint64_t>

atomic_int_least8_t

atomic<int_least8_t>

atomic_uint_least8_t

atomic<uint_least8_t>

atomic_int_least16_t

atomic<int_least16_t>

atomic_uint_least16_t

atomic<uint_least16_t>

atomic_int_least32_t

atomic<int_least32_t>

atomic_uint_least32_t

atomic<uint_least32_t>

atomic_int_least64_t

atomic<int_least64_t>

atomic_uint_least64_t

atomic<uint_least64_t>

atomic_int_fast8_t

atomic<int_fast8_t>

atomic_uint_fast8_t

atomic<uint_fast8_t>

atomic_int_fast16_t

atomic<int_fast16_t>

atomic_uint_fast16_

atomic<uint_fast16_t>

atomic_int_fast32_t

atomic<int_fast32_t>

atomic_uint_fast32_t

atomic<uint_fast32_t>

atomic_int_fast64_t

atomic<int_fast64_t>

atomic_uint_fast64_t

atomic<uint_fast64_t>

atomic_intptr_t

atomic<intptr_t>

atomic_uintptr_t

atomic<uintptr_t>

atomic_size_t

atomic<size_t>

atomic_ptrdiff_t

atomic<ptrdiff_t>

atomic_intmax_t

atomic<intmax_t>

atomic_uintmax_t

atomic<uintmax_t>

Estruturas

Nome

Descrição

Estrutura atômica

Descreve um objeto que executa operações atômicas em um valor armazenado.

Estrutura atomic_flag

Descreve um objeto que atomic para limpar os conjuntos e um sinalizador de bool .

enum

Nome

Descrição

memory_order de Enum

Fornece nomes token para operações de sincronização em locais de memória.Essas operações afetam como as atribuições em um segmento se tornam visíveis em outro.

Funções

Em a lista, as funções que não terminam em _explicit têm-nas a semântica de _explicitcorrespondente, exceto que possuem os argumentos implícitos de memory_order de memory_order_seq_cst.

Nome

Descrição

Função atomic_compare_exchange_strong

executa um atômico comparam e trocam a operação.

Função atomic_compare_exchange_strong_explicit

executa um atômico comparam e trocam a operação.

Função atomic_compare_exchange_weak

executa um atômico fraco comparam e trocam a operação.

Função atomic_compare_exchange_weak_explicit

executa um atômico fraco comparam e trocam a operação.

Função atomic_exchange

substitui um valor armazenado.

Função atomic_exchange_explicit

substitui um valor armazenado.

Função atomic_fetch_add

Adiciona um valor especificado como um valor armazenado existente.

Função atomic_fetch_add_explicit

Adiciona um valor especificado como um valor armazenado existente.

Função atomic_fetch_and

Executa and bit a bit em um valor especificado e um valor armazenado existente.

Função atomic_fetch_and_explicit

Executa and bit a bit em um valor especificado e um valor armazenado existente.

Função atomic_fetch_or

Executa or bit a bit em um valor especificado e um valor armazenado existente.

Função atomic_fetch_or_explicit

Executa or bit a bit em um valor especificado e um valor armazenado existente.

Função atomic_fetch_sub

subtrai um valor especificado de um valor armazenado existente.

Função atomic_fetch_sub_explicit

subtrai um valor especificado de um valor armazenado existente.

Função atomic_fetch_xor

Executa exclusive or bit a bit em um valor especificado e um valor armazenado existente.

Função atomic_fetch_xor_explicit

Executa exclusive or bit a bit em um valor especificado e um valor armazenado existente.

Função atomic_flag_clear

Define o sinalizador em um objeto de atomic_flag a false.

Função atomic_flag_clear_explicit

Define o sinalizador em um objeto de atomic_flag a false.

Função atomic_flag_test_and_set

Define o sinalizador em um objeto de atomic_flag a true.

Função atomic_flag_test_and_set_explicit

Define o sinalizador em um objeto de atomic_flag a true.

Função atomic_init

Defina o valor armazenado em um objeto de atomic .

Função atomic_is_lock_free

Especifica se as operações atômicas em um objeto especificado são livres bloqueio-.

Função atomic_load

Recupera atomic valor um.

Função atomic_load_explicit

Recupera atomic valor um.

Função atomic_signal_fence

Atua como uma circunda que estabelece a memória de ordenação requisitos entre cercas em um segmento de chamada que tem manipuladores de sinal executados no mesmo segmento.

Função atomic_store

Um valor armazena atomic.

Função atomic_store_explicit

Um valor armazena atomic.

Função atomic_thread_fence

Atua como uma circunda que estabelece a memória de ordenação requisitos em relação às outras cercas.

Função kill_dependency

Interrompe uma cadeia possível de dependência.

Consulte também

Referência

Standard Template Library

Outros recursos

Arquivos de cabeçalho