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_pope 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_pope 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_sizenão é seguro para simultaneidade, e pode produzir resultados incorretos se chamado simultaneamente com chamadas para os métodos push, try_pop e empty.

Confira também

Namespace de simultaneidade