Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 l'uso concorrente sono sempre validi. Non è una garanzia di inizializzazione degli elementi o di un ordine di 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.
_Asse
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 per gli elementi in una coda concorrente. |
const_reference |
Tipo che fornisce un riferimento a un elemento const archiviato in una coda concorrenziale per la lettura e l'esecuzione di const operazioni. |
difference_type |
Tipo che fornisce la distanza con segno tra due elementi in una coda concorrente. |
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 | Sovraccarico. Costruisce una coda concorrente. |
| Distruttore ~concurrent_queue | Distrugge la coda concorrente. |
Metodi pubblici
| Nome | Descrizione |
|---|---|
| cancellare | Cancella la coda concorrente, eliminando tutti gli elementi attualmente in coda. Questo metodo non è sicuro per la concorrenza. |
| empty | Verifica se la coda simultanea è vuota al momento della chiamata a questo metodo. Questo metodo è sicuro per la concorrenza. |
| get_allocator | Restituisce una copia dell'allocatore utilizzato per costruire la coda simultanea. Questo metodo è sicuro per la concorrenza. |
| push | Sovraccarico. Accoda un elemento alla fine della coda concorrente. Questo metodo è sicuro per la concorrenza. |
| try_pop | Rimuove dalla coda un elemento se disponibile. Questo metodo è sicuro per la concorrenza. |
| unsafe_begin | Sovraccarico. Restituisce un iteratore di tipo iterator o const_iterator all'inizio della coda simultanea. Questo metodo non è sicuro per la concorrenza. |
| unsafe_end | Sovraccarico. 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
Header: concurrent_queue.h
Spazio dei nomi: Concurrency
clear
Cancella la coda concorrente, eliminando tutti gli elementi attualmente in coda. Questo metodo non è sicuro per la concorrenza.
void clear();
concurrent_queue
Costruisce una coda 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);
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 allocatore _Al e inizializzano la coda.
Il primo costruttore definisce 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
Distrugge la coda concorrente.
~concurrent_queue();
empty
Verifica se la coda simultanea è vuota al momento della chiamata a questo metodo. Questo metodo è sicuro per la concorrenza.
bool empty() const;
Valore restituito
true se la coda concorrente era vuota nel momento in cui abbiamo controllato, false in caso contrario.
Osservazioni:
Anche se questo metodo è sicuro per la concorrenza rispetto alle chiamate ai metodi push, try_pop e empty, il valore restituito potrebbe non essere corretto nel momento in cui viene controllato dal thread chiamante.
get_allocator
Restituisce una copia dell'allocatore utilizzato per costruire la coda simultanea. Questo metodo è sicuro per la concorrenza.
allocator_type get_allocator() const;
Valore restituito
Copia dell'allocatore usato per costruire la coda simultanea.
push
Accoda un elemento alla fine della coda concorrente. Questo metodo è sicuro per la concorrenza.
void push(const T& _Src);
void push(T&& _Src);
Parametri
_Src
Elemento da aggiungere alla coda.
Osservazioni:
push è sicuro per la concorrenza rispetto alle chiamate ai metodi push, try_pop e empty.
try_pop
Rimuove dalla coda un elemento se disponibile. Questo metodo è sicuro per la 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 rimosso dalla coda correttamente, il parametro _Dest riceve il valore rimosso, il valore originale che era nella coda viene eliminato, 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 è sicuro rispetto alla concorrenza per quanto riguarda le chiamate ai metodi push, try_pop e empty.
inizio_non_sicuro
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.
dimensione_non_sicura
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.