<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çã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 |
---|---|
Descreve um objeto que executa operações atômicas em um valor armazenado. |
|
Descreve um objeto que atomic para limpar os conjuntos e um sinalizador de bool . |
enum
Nome |
Descrição |
---|---|
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 |
---|---|
executa um atômico comparam e trocam a operação. |
|
executa um atômico comparam e trocam a operação. |
|
executa um atômico fraco comparam e trocam a operação. |
|
executa um atômico fraco comparam e trocam a operação. |
|
substitui um valor armazenado. |
|
substitui um valor armazenado. |
|
Adiciona um valor especificado como um valor armazenado existente. |
|
Adiciona um valor especificado como um valor armazenado existente. |
|
Executa and bit a bit em um valor especificado e um valor armazenado existente. |
|
Executa and bit a bit em um valor especificado e um valor armazenado existente. |
|
Executa or bit a bit em um valor especificado e um valor armazenado existente. |
|
Executa or bit a bit em um valor especificado e um valor armazenado existente. |
|
subtrai um valor especificado de um valor armazenado existente. |
|
subtrai um valor especificado de um valor armazenado existente. |
|
Executa exclusive or bit a bit em um valor especificado e um valor armazenado existente. |
|
Executa exclusive or bit a bit em um valor especificado e um valor armazenado existente. |
|
Define o sinalizador em um objeto de atomic_flag a false. |
|
Define o sinalizador em um objeto de atomic_flag a false. |
|
Define o sinalizador em um objeto de atomic_flag a true. |
|
Define o sinalizador em um objeto de atomic_flag a true. |
|
Defina o valor armazenado em um objeto de atomic . |
|
Especifica se as operações atômicas em um objeto especificado são livres bloqueio-. |
|
Recupera atomic valor um. |
|
Recupera atomic valor um. |
|
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. |
|
Um valor armazena atomic. |
|
Um valor armazena atomic. |
|
Atua como uma circunda que estabelece a memória de ordenação requisitos em relação às outras cercas. |
|
Interrompe uma cadeia possível de dependência. |