Condividi tramite


Classe concurrent_queue

La classe concurrent_queue è una classe contenitore di sequenze che consente l'accesso di tipo First in First out ai relativi elementi. Abilita un set limitato di operazioni sicure per concorrenza, ad esempio push e try_pop. In questo caso, i puntatori o gli iteratori sicuri per la concorrenza sono sempre validi. Non è una garanzia di inizializzazione degli elementi o di un ordine attraversamento specifico.

Sintassi

template<typename T, class _Ax>
class concurrent_queue: public ::Concurrency::details::_Concurrent_queue_base_v4;

Parametri

T
Tipo di dati degli elementi da archiviare nella coda.

_Ascia
Tipo che rappresenta l'oggetto allocatore archiviato che incapsula i dettagli sull'allocazione e la deallocazione della memoria per questa coda simultanea. Questo argomento è facoltativo e il valore predefinito è allocator<T>.

Membri

Typedef pubblici

Nome Descrizione
allocator_type Tipo che rappresenta la classe allocatore per la coda simultanea.
const_iterator Tipo che rappresenta un iteratore non thread-safe const sugli elementi in una coda simultanea.
const_reference Tipo che fornisce un riferimento a un const elemento archiviato in una coda simultanea per la lettura e l'esecuzione di const operazioni.
difference_type Tipo che fornisce la distanza con segno tra due elementi in una coda simultanea.
iterator Tipo che rappresenta un iteratore non thread-safe sugli elementi in una coda simultanea.
reference Tipo che fornisce un riferimento a un elemento archiviato in una coda simultanea.
size_type Tipo che conta il numero di elementi in una coda simultanea.
value_type Tipo che rappresenta il tipo di dati archiviato in una coda simultanea.

Costruttori pubblici

Nome Descrizione
concurrent_queue Con overload. Costruisce una coda simultanea.
Distruttore ~concurrent_queue Elimina definitivamente la coda simultanea.

Metodi pubblici

Nome Descrizione
deselezionare Cancella la coda simultanea, eliminando tutti gli elementi attualmente accodati. Questo metodo non è sicuro per la concorrenza.
empty Verifica se la coda simultanea è vuota al momento della chiamata a questo metodo. Questo metodo è indipendente dalla concorrenza.
get_allocator Restituisce una copia dell'allocatore utilizzato per costruire la coda simultanea. Questo metodo è indipendente dalla concorrenza.
push Con overload. Accoda un elemento alla fine finale della coda simultanea. Questo metodo è indipendente dalla concorrenza.
try_pop Rimuove dalla coda un elemento se disponibile. Questo metodo è indipendente dalla concorrenza.
unsafe_begin Con overload. Restituisce un iteratore di tipo iterator o const_iterator all'inizio della coda simultanea. Questo metodo non è sicuro per la concorrenza.
unsafe_end Con overload. Restituisce un iteratore di tipo iterator o const_iterator alla fine della coda simultanea. Questo metodo non è sicuro per la concorrenza.
unsafe_size Restituisce il numero di elementi nella coda. Questo metodo non è sicuro per la concorrenza.

Osservazioni:

Per altre informazioni, vedere Contenitori e oggetti paralleli.

Gerarchia di ereditarietà

concurrent_queue

Requisiti

Intestazione: concurrent_queue.h

Spazio dei nomi: Concurrency

clear

Cancella la coda simultanea, eliminando tutti gli elementi attualmente accodati. Questo metodo non è sicuro per la concorrenza.

void clear();

concurrent_queue

Costruisce una coda simultanea.

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);

Parametri

_InputIterator
Tipo dell'iteratore di input che specifica un intervallo di valori.

_Ale
Classe Allocator da usare con questo oggetto.

_OtherQ
Oggetto concurrent_queue di origine da cui copiare o spostare elementi.

_Cominciare
Posizione del primo elemento nell'intervallo di elementi da copiare.

_Fine
Posizione del primo elemento oltre l'intervallo di elementi da copiare.

Osservazioni:

Tutti i costruttori archiviano un oggetto _Al allocatore e inizializzano la coda.

Il primo costruttore specifica una coda iniziale vuota e specifica in modo esplicito il tipo di allocatore da usare.

Il secondo costruttore specifica una copia della coda _OtherQsimultanea.

Tramite il terzo costruttore viene specificato uno spostamento della coda simultanea _OtherQ.

Il quarto costruttore specifica i valori forniti dall'intervallo di iteratori [ _Begin, _End).

~concurrent_queue

Elimina definitivamente la coda simultanea.

~concurrent_queue();

empty

Verifica se la coda simultanea è vuota al momento della chiamata a questo metodo. Questo metodo è indipendente dalla concorrenza.

bool empty() const;

Valore restituito

true se la coda simultanea è vuota al momento dell'analisi, false in caso contrario.

Osservazioni:

Anche se questo metodo è indipendente dalla concorrenza rispetto alle chiamate ai metodi push, try_pope empty, il valore restituito potrebbe non essere corretto dal momento in cui viene controllato dal thread chiamante.

get_allocator

Restituisce una copia dell'allocatore utilizzato per costruire la coda simultanea. Questo metodo è indipendente dalla concorrenza.

allocator_type get_allocator() const;

Valore restituito

Copia dell'allocatore usato per costruire la coda simultanea.

push

Accoda un elemento alla fine finale della coda simultanea. Questo metodo è indipendente dalla concorrenza.

void push(const T& _Src);

void push(T&& _Src);

Parametri

_Src
Elemento da aggiungere alla coda.

Osservazioni:

push è indipendente dalla concorrenza rispetto alle chiamate ai metodi push, try_pope empty.

try_pop

Rimuove dalla coda un elemento se disponibile. Questo metodo è indipendente dalla concorrenza.

bool try_pop(T& _Dest);

Parametri

_Dest
Riferimento a una posizione in cui archiviare l'elemento dequeued.

Valore restituito

true se un elemento è stato dequeuato correttamente, false in caso contrario.

Osservazioni:

Se un elemento è stato dequeued correttamente, il parametro _Dest riceve il valore dequeued, il valore originale mantenuto nella coda viene eliminato definitivamente e questa funzione restituisce true. Se non è presente alcun elemento da rimuovere dalla coda, questa funzione restituisce false senza blocco e il contenuto del _Dest parametro non è definito.

try_pop è indipendente dalla concorrenza rispetto alle chiamate ai metodi push, try_pope empty.

unsafe_begin

Restituisce un iteratore di tipo iterator o const_iterator all'inizio della coda simultanea. Questo metodo non è sicuro per la concorrenza.

iterator unsafe_begin();

const_iterator unsafe_begin() const;

Valore restituito

Iteratore di tipo iterator o const_iterator all'inizio dell'oggetto coda simultaneo.

Osservazioni:

Gli iteratori per la concurrent_queue classe sono destinati principalmente al debug, perché sono lenti e l'iterazione non è sicura per la concorrenza rispetto ad altre operazioni di coda.

unsafe_end

Restituisce un iteratore di tipo iterator o const_iterator alla fine della coda simultanea. Questo metodo non è sicuro per la concorrenza.

iterator unsafe_end();

const_iterator unsafe_end() const;

Valore restituito

Iteratore di tipo iterator o const_iterator alla fine della coda simultanea.

Osservazioni:

Gli iteratori per la concurrent_queue classe sono destinati principalmente al debug, perché sono lenti e l'iterazione non è sicura per la concorrenza rispetto ad altre operazioni di coda.

unsafe_size

Restituisce il numero di elementi nella coda. Questo metodo non è sicuro per la concorrenza.

size_type unsafe_size() const;

Valore restituito

Dimensioni della coda simultanea.

Osservazioni:

unsafe_size non è indipendente dalla concorrenza e può produrre risultati non corretti se viene chiamato simultaneamente con chiamate ai metodi push, try_pope empty.

Vedi anche

Spazio dei nomi concurrency