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 _OtherQ
simultanea.
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_pop
e 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_pop
e 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_pop
e 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_pop
e empty
.