Classe concurrent_queue
A classe concurrent_queue
é uma classe de contêiner de sequência que permite acesso primeiro a entrar, primeiro a sair a seus elementos. Ela habilita um conjunto limitado de operações de segurança de simultaneidade, como push
e try_pop
. Aqui, concurrency-safe significa que os ponteiros ou iteradores são sempre válidos. Não é uma garantia de inicialização do elemento ou de uma ordem de passagem específica.
Sintaxe
template<typename T, class _Ax>
class concurrent_queue: public ::Concurrency::details::_Concurrent_queue_base_v4;
Parâmetros
T
O tipo de dados dos elementos a serem armazenados na fila.
_Ax
O tipo que representa o objeto alocador armazenado que encapsula detalhes sobre a alocação e a desalocação de memória do vetor simultâneo. Esse argumento é opcional e o valor padrão é allocator<T>
.
Membros
Typedefs públicos
Nome | Descrição |
---|---|
allocator_type |
Um tipo que representa a classe do alocador para a fila simultânea. |
const_iterator |
Um tipo que representa um iterador não thread-safe const sobre elementos em uma fila simultânea. |
const_reference |
Um tipo que fornece uma referência para um elemento const armazenado em um fila simultânea para leitura e execução de operações const . |
difference_type |
Um tipo que fornece a distância com sinal entre dois elementos em uma fila simultânea. |
iterator |
Um tipo que representa um iterador não thread-safe sobre elementos em uma fila simultânea. |
reference |
Um tipo que fornece uma referência a um elemento armazenado em uma fila simultânea. |
size_type |
Um tipo que conta o número de elementos em uma fila simultânea. |
value_type |
Um tipo que representa o tipo de dados armazenados em uma fila simultânea. |
Construtores públicos
Nome | Descrição |
---|---|
concurrent_queue | Sobrecarregado. Constrói uma fila simultânea. |
Destruidor ~concurrent_queue | Destrói a fila simultânea. |
Métodos públicos
Nome | Descrição |
---|---|
clear | Limpa a fila simultânea, destruindo todos os elementos enfileirados no momento. Esse método não é seguro para simultaneidade. |
empty | Testa se a fila simultânea está vazia no momento em que esse método é chamado. Esse método é seguro para simultaneidade. |
get_allocator | Retorna uma cópia do alocador usado para construir a fila simultânea. Esse método é seguro para simultaneidade. |
push | Sobrecarregado. Enfileira um item no final da fila simultânea. Esse método é seguro para simultaneidade. |
try_pop | Remove um item da fila se houver um disponível. Esse método é seguro para simultaneidade. |
unsafe_begin | Sobrecarregado. Retorna um iterador de tipo iterator ou const_iterator para o início da fila simultânea. Esse método não é seguro para simultaneidade. |
unsafe_end | Sobrecarregado. Retorna um iterador de tipo iterator ou const_iterator para o final da fila simultânea. Esse método não é seguro para simultaneidade. |
unsafe_size | Retorna o número de itens na fila. Esse método não é seguro para simultaneidade. |
Comentários
Para mais informações, confira Contêineres e objetos paralelos.
Hierarquia de herança
concurrent_queue
Requisitos
Cabeçalho: concurrent_queue.h
Namespace: concurrency
clear
Limpa a fila simultânea, destruindo todos os elementos enfileirados no momento. Esse método não é seguro para simultaneidade.
void clear();
concurrent_queue
Constrói uma fila simultânea.
explicit concurrent_queue(
const allocator_type& _Al = allocator_type());
concurrent_queue(
const concurrent_queue& _OtherQ,
const allocator_type& _Al = allocator_type());
concurrent_queue(
concurrent_queue&& _OtherQ,
const allocator_type& _Al = allocator_type());
template<typename _InputIterator>
concurrent_queue(_InputIterator _Begin,
_InputIterator _End);
Parâmetros
_InputIterator
O tipo do iterador de entrada que especifica um intervalo de valores.
_Al
A classe de alocador a ser usada com esse objeto.
_OtherQ
O objeto concurrent_queue
de origem do qual copiar ou mover elementos.
_Begin
A posição do primeiro elemento no intervalo de elementos a ser copiado.
_End
A posição do primeiro elemento após o intervalo de elementos a ser copiado.
Comentários
Todos os construtores armazenam um objeto alocador _Al
e iniciam a fila.
O primeiro construtor especifica uma fila inicial vazia e especifica explicitamente o tipo de alocador a ser usado.
O segundo construtor especifica uma cópia da fila simultânea _OtherQ
.
O terceiro construtor especifica uma movimentação da fila simultânea _OtherQ
.
O quarto construtor especifica valores fornecidos pelo intervalo do iterador [ _Begin
, _End
).
~ concurrent_queue
Destrói a fila simultânea.
~concurrent_queue();
empty
Testa se a fila simultânea está vazia no momento em que esse método é chamado. Esse método é seguro para simultaneidade.
bool empty() const;
Valor de retorno
true
se a fila simultânea estivesse vazia no momento em que olhamos, caso contrário false
.
Comentários
Embora esse método seja seguro para simultaneidade em relação a chamadas para os métodos push
, try_pop
e empty
, o valor retornado pode estar incorreto no momento em que for inspecionado pelo thread de chamada.
get_allocator
Retorna uma cópia do alocador usado para construir a fila simultânea. Esse método é seguro para simultaneidade.
allocator_type get_allocator() const;
Valor de retorno
Uma cópia do alocador usado para construir a fila simultânea.
efetuar push
Enfileira um item no final da fila simultânea. Esse método é seguro para simultaneidade.
void push(const T& _Src);
void push(T&& _Src);
Parâmetros
_Src
O item a ser adicionado à fila.
Comentários
push
é seguro para simultaneidade em relação a chamadas para os métodos push
, try_pop
e empty
.
try_pop
Remove um item da fila se houver um disponível. Esse método é seguro para simultaneidade.
bool try_pop(T& _Dest);
Parâmetros
_Dest
Uma referência a um local para armazenar o item removido da fila.
Valor de retorno
true
se o item foi removido com êxito da fila; caso contrário, false
.
Comentários
Se um item tiver sido removido da fila com êxito, o parâmetro _Dest
receberá o valor removido da fila; o valor original mantido na fila será destruído, e essa função retornará true
. Se não houver nenhum item a ser removido da fila, essa função retornará false
sem bloqueio, e o conteúdo do parâmetro _Dest
será indefinido.
try_pop
é seguro para simultaneidade em relação a chamadas para os métodos push
, try_pop
e empty
.
unsafe_begin
Retorna um iterador de tipo iterator
ou const_iterator
para o início da fila simultânea. Esse método não é seguro para simultaneidade.
iterator unsafe_begin();
const_iterator unsafe_begin() const;
Valor de retorno
Retorna um iterador de tipo iterator
ou const_iterator
para o início do objeto da fila simultânea.
Comentários
Os iteradores da classe concurrent_queue
destinam-se principalmente à depuração, pois são lentos e a iteração não é segura para simultaneidade em relação a outras operações de fila.
unsafe_end
Retorna um iterador de tipo iterator
ou const_iterator
para o final da fila simultânea. Esse método não é seguro para simultaneidade.
iterator unsafe_end();
const_iterator unsafe_end() const;
Valor de retorno
Um iterador de tipo iterator
ou const_iterator
para o final da fila simultânea.
Comentários
Os iteradores da classe concurrent_queue
destinam-se principalmente à depuração, pois são lentos e a iteração não é segura para simultaneidade em relação a outras operações de fila.
unsafe_size
Retorna o número de itens na fila. Esse método não é seguro para simultaneidade.
size_type unsafe_size() const;
Valor de retorno
O tamanho da fila simultânea.
Comentários
unsafe_size
não é seguro para simultaneidade, e pode produzir resultados incorretos se chamado simultaneamente com chamadas para os métodos push
, try_pop
e empty
.