Partilhar via


concurrent_queue Classe

A classe concurrent_queue é um contentor de sequência que permite o acesso aos seus elementos na ordem de chegada: o primeiro a entrar é o primeiro a sair. Permite um conjunto limitado de operações protegidas contra condições de concorrência, como push e try_pop. Aqui, concorrência segura significa que os ponteiros ou iteradores são sempre válidos. Não é garantia de inicialização de elementos, nem de uma ordem de percurso 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 armazenar 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 para esta fila concorrente. Este argumento é opcional e o valor padrão é allocator<T>.

Membros

Definições de Tipos Públicas

Nome Description
allocator_type Um tipo que representa a classe alocadora para a fila concorrente.
const_iterator Um tipo que representa um iterador não thread-safe sobre elementos numa fila concorrente.
const_reference Um tipo que fornece uma referência a elemento const armazenado numa fila concorrente para leitura e execução de operações const.
difference_type Um tipo que fornece a distância assinada entre dois elementos numa fila concorrente.
iterator Um tipo que representa um iterador não seguro para threads sobre os elementos numa fila concorrente.
reference Um tipo que fornece uma referência a um elemento armazenado numa fila concorrente.
size_type Um tipo que conta o número de elementos numa fila concorrente.
value_type Um tipo que representa o tipo de dados armazenado numa fila concorrente.

Construtores Públicos

Nome Description
concurrent_queue Sobrecarregado. Constrói uma fila concorrente.
~concurrent_queue Destructor Destrói a fila concorrente.

Métodos Públicos

Nome Description
claro Limpa a fila concorrente, destruindo quaisquer elementos que estejam enfileirados atualmente. Este método não é seguro para simultaneidade.
empty Testa se a fila concorrente está vazia no momento em que este método é chamado. Este método é seguro para concorrência.
get_allocator Devolve uma cópia do alocador usado para construir a fila concorrente. Este método é seguro para concorrência.
empurrar Sobrecarregado. Insere um item no final da fila simultânea. Este método é seguro para concorrência.
try_pop Retira um item da fila se houver um disponível. Este método é seguro para concorrência.
unsafe_begin Sobrecarregado. Devolve um iterador do tipo iterator ou const_iterator ao início da fila concorrente. Este método não é seguro para simultaneidade.
fim_inseguro Sobrecarregado. Devolve um iterador do tipo iterator ou const_iterator ao final da fila concorrente. Este método não é seguro para simultaneidade.
tamanho_inseguro Devolve o número de itens na fila. Este método não é seguro para simultaneidade.

Observações

Para mais informações, consulte Recipientes e Objetos Paralelos.

Hierarquia de herança

concurrent_queue

Requerimentos

Cabeçalho: concurrent_queue.h

Namespace: simultaneidade

desmarcar

Limpa a fila concorrente, destruindo quaisquer elementos que estejam enfileirados atualmente. Este método não é seguro para simultaneidade.

void clear();

concurrent_queue

Constrói uma fila concorrente.

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 alocadora a usar com este objeto.

_OtherQ
O objeto de origem concurrent_queue para copiar ou mover elementos.

_Begin
Posição do primeiro elemento no intervalo de elementos a copiar.

_End
Posição do primeiro elemento para além do alcance dos elementos a copiar.

Observações

Todos os construtores armazenam um objeto _Al alocador e inicializam 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 _OtherQconcorrente .

O terceiro construtor especifica um movimento da fila _OtherQconcorrente .

O quarto construtor especifica valores fornecidos pelo intervalo do iterador [ _Begin, _End).

~concurrent_queue

Destrói a fila concorrente.

~concurrent_queue();

vazio

Testa se a fila concorrente está vazia no momento em que este método é chamado. Este método é seguro para concorrência.

bool empty() const;

Valor de retorno

true se a fila concorrente estivesse vazia no momento em que olhámos, false caso contrário.

Observações

Embora este método seja seguro para execução concorrente relativamente a chamadas para os métodos push, try_pop, e empty, o valor devolvido pode ser incorreto quando inspecionado pelo thread de chamada.

get_allocator

Devolve uma cópia do alocador usado para construir a fila concorrente. Este método é seguro para concorrência.

allocator_type get_allocator() const;

Valor de retorno

Uma cópia do alocador usado para construir a fila concorrente.

emitir

Insere um item no final da fila simultânea. Este método é seguro para concorrência.

void push(const T& _Src);

void push(T&& _Src);

Parâmetros

_Src
O item que será adicionado à fila.

Observações

push é segura para operações concorrentes em relação às chamadas dos métodos push, try_pop e empty.

try_pop

Retira um item da fila se houver um disponível. Este método é seguro para concorrência.

bool try_pop(T& _Dest);

Parâmetros

_Dest
Uma referência a um local para armazenar o item retirado da fila.

Valor de retorno

true se um item foi removido da fila com sucesso, false caso contrário.

Observações

Se um item foi eliminado com sucesso da fila, o parâmetro _Dest recebe o valor retirado da fila, o valor original mantido na fila é destruído, e esta função devolve true. Se não houvesse elemento para retirar da fila, esta função retorna false sem bloqueio, e o conteúdo do _Dest parâmetro fica indefinido.

try_pop é seguro em concorrência relativamente a chamadas aos métodos push, try_pop e empty.

unsafe_begin (início_inseguro)

Devolve um iterador do tipo iterator ou const_iterator ao início da fila concorrente. Este método não é seguro para simultaneidade.

iterator unsafe_begin();

const_iterator unsafe_begin() const;

Valor de retorno

Um iterador do tipo iterator ou const_iterator até ao início do objeto da fila concorrente.

Observações

Os iteradores da concurrent_queue classe destinam-se principalmente à depuração, pois são lentos e a iteração não é segura para concorrência em relação a outras operações de fila.

unsafe_end

Devolve um iterador do tipo iterator ou const_iterator ao final da fila concorrente. Este método não é seguro para simultaneidade.

iterator unsafe_end();

const_iterator unsafe_end() const;

Valor de retorno

Um iterador do tipo iterator ou const_iterator até ao fim da fila concorrente.

Observações

Os iteradores da concurrent_queue classe destinam-se principalmente à depuração, pois são lentos e a iteração não é segura para concorrência em relação a outras operações de fila.

unsafe_size

Devolve o número de itens na fila. Este método não é seguro para simultaneidade.

size_type unsafe_size() const;

Valor de retorno

O tamanho da fila concorrente.

Observações

unsafe_size não é segura para concorrência e pode produzir resultados incorretos se for chamada em simultâneo com chamadas para os métodos push, try_pop, e empty.

Consulte também

concorrência Namespace