concurrent_queue-Klasse
Die concurrent_queue
-Klasse ist eine Sequenzcontainerklasse, die "First In, First Out"-Zugriff auf ihre Elemente zulässt. Sie aktiviert einen beschränkten Satz von parallelitätssicheren Vorgängen, z. B. push
und try_pop
. Hier sind Parallelitätssichere Zeiger oder Iteratoren immer gültig. Es ist keine Garantie für die Elementinitialisierung oder eine bestimmte Traversalreihenfolge.
Syntax
template<typename T, class _Ax>
class concurrent_queue: public ::Concurrency::details::_Concurrent_queue_base_v4;
Parameter
T
Der Datentyp der Elemente, die in der Warteschlange gespeichert werden sollen.
_Axt
Der Typ, der das gespeicherte Allocatorobjekt darstellt, das Details zur Zuordnung und Zuordnung des Speichers für diese gleichzeitige Warteschlange kapselt. Dieses Argument ist optional, und der Standardwert ist allocator<T>
.
Member
Öffentliche Typedefs
Name | Beschreibung |
---|---|
allocator_type |
Ein Typ, der die Allocator-Klasse für die gleichzeitige Warteschlange darstellt. |
const_iterator |
Ein Typ, der einen nicht threadsicheren const Iterator für Elemente in einer gleichzeitigen Warteschlange darstellt. |
const_reference |
Ein Typ, der einen Verweis auf ein const Element bereitstellt, das in einer gleichzeitigen Warteschlange zum Lesen und Ausführen von const Vorgängen gespeichert ist. |
difference_type |
Ein Typ, der den signierten Abstand zwischen zwei Elementen in einer gleichzeitigen Warteschlange bereitstellt. |
iterator |
Ein Typ, der einen nicht threadsicheren Iterator für die Elemente in einer gleichzeitigen Warteschlange darstellt. |
reference |
Ein Typ, der einen Verweis auf ein Element bereitstellt, das in einer gleichzeitigen Warteschlange gespeichert ist. |
size_type |
Ein Typ, der die Anzahl der Elemente in einer gleichzeitigen Warteschlange zählt. |
value_type |
Ein Typ, der den Datentyp darstellt, der in einer gleichzeitigen Warteschlange gespeichert ist. |
Öffentliche Konstruktoren
Name | Beschreibung |
---|---|
concurrent_queue | Überladen. Erstellt eine gleichzeitige Warteschlange. |
~concurrent_queue Destruktor | Zerstört die gleichzeitige Warteschlange. |
Öffentliche Methoden
Name | Beschreibung |
---|---|
clear | Löscht die gleichzeitige Warteschlange und zerstört alle derzeit enqueuierten Elemente. Diese Methode ist nicht nebenläufigkeitssicher. |
empty | Testet, ob die gleichzeitige Warteschlange im Moment leer ist, wenn diese Methode aufgerufen wird. Diese Methode ist nebenläufigkeitssicher. |
get_allocator | Gibt eine Kopie des Allocators zurück, der zum Erstellen der gleichzeitigen Warteschlange verwendet wird. Diese Methode ist nebenläufigkeitssicher. |
push | Überladen. Queues ein Element am Ende der gleichzeitigen Warteschlange. Diese Methode ist nebenläufigkeitssicher. |
try_pop | Entfernt ein Element aus der Warteschlange, wenn ein Element verfügbar ist. Diese Methode ist nebenläufigkeitssicher. |
unsafe_begin | Überladen. Gibt einen Iterator vom Typ iterator oder const_iterator an den Anfang der gleichzeitigen Warteschlange zurück. Diese Methode ist nicht nebenläufigkeitssicher. |
unsafe_end | Überladen. Gibt einen Iterator vom Typ iterator oder const_iterator an das Ende der gleichzeitigen Warteschlange zurück. Diese Methode ist nicht nebenläufigkeitssicher. |
unsafe_size | Gibt die Anzahl der Elemente in der Warteschlange zurück. Diese Methode ist nicht nebenläufigkeitssicher. |
Hinweise
Weitere Informationen finden Sie unter Parallel Containers and Objects.
Vererbungshierarchie
concurrent_queue
Anforderungen
Kopfzeile: concurrent_queue.h
Namespace: Parallelität
clear
Löscht die gleichzeitige Warteschlange und zerstört alle derzeit enqueuierten Elemente. Diese Methode ist nicht nebenläufigkeitssicher.
void clear();
concurrent_queue
Erstellt eine gleichzeitige Warteschlange.
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);
Parameter
_InputIterator
Der Typ des Eingabe iterators, der einen Wertebereich angibt.
_Al
Die mit diesem Objekt zu verwendende Zuweisungsklasse.
_OtherQ
Das concurrent_queue
-Quellobjekt, aus dem Elemente kopiert oder verschoben werden sollen.
_Anfangen
Die Position des ersten Elements in dem zu kopierenden Elementbereich.
_Ende
Die Position des ersten Elements nach dem zu kopierenden Elementbereich.
Hinweise
Alle Konstruktoren speichern ein Allocator-Objekt _Al
und initialisieren die Warteschlange.
Der erste Konstruktor gibt eine leere Anfangswarteschlange an und gibt explizit den zu verwendenden Allocatortyp an.
Der zweite Konstruktor gibt eine Kopie der gleichzeitigen Warteschlange _OtherQ
an.
Der dritte Konstruktor gibt eine Verschiebung der gleichzeitigen Warteschlange _OtherQ
an.
Der vierte Konstruktor gibt Werte an, die vom Iteratorbereich [ _Begin
, ). _End
~concurrent_queue
Zerstört die gleichzeitige Warteschlange.
~concurrent_queue();
empty
Testet, ob die gleichzeitige Warteschlange im Moment leer ist, wenn diese Methode aufgerufen wird. Diese Methode ist nebenläufigkeitssicher.
bool empty() const;
Rückgabewert
true
wenn die gleichzeitige Warteschlange im Moment leer war, false
andernfalls.
Hinweise
Während diese Methode in Bezug auf Aufrufe der Methoden push
try_pop
, und empty
der zurückgegebene Wert möglicherweise falsch ist, wenn sie vom aufrufenden Thread überprüft wird, ist diese Methode zwar parallel.
get_allocator
Gibt eine Kopie des Allocators zurück, der zum Erstellen der gleichzeitigen Warteschlange verwendet wird. Diese Methode ist nebenläufigkeitssicher.
allocator_type get_allocator() const;
Rückgabewert
Eine Kopie des Allocators, der zum Erstellen der gleichzeitigen Warteschlange verwendet wird.
push
Queues ein Element am Ende der gleichzeitigen Warteschlange. Diese Methode ist nebenläufigkeitssicher.
void push(const T& _Src);
void push(T&& _Src);
Parameter
_Src
Das Element, das der Warteschlange hinzugefügt werden soll.
Hinweise
push
ist in Bezug auf Aufrufe der Methoden push
, try_pop
und empty
.
try_pop
Entfernt ein Element aus der Warteschlange, wenn ein Element verfügbar ist. Diese Methode ist nebenläufigkeitssicher.
bool try_pop(T& _Dest);
Parameter
_Dest
Ein Verweis auf einen Speicherort zum Speichern des dequeuierten Elements.
Rückgabewert
true
wenn ein Element erfolgreich abgebrochen wurde, false
andernfalls.
Hinweise
Wenn ein Element erfolgreich dequeuiert wurde, empfängt der Parameter _Dest
den dequeuierten Wert, der ursprüngliche Wert in der Warteschlange wird zerstört, und diese Funktion wird zurückgegeben true
. Wenn kein Element dequeue vorhanden ist, wird diese Funktion ohne Blockierung zurückgegeben false
, und der Inhalt des _Dest
Parameters ist nicht definiert.
try_pop
ist in Bezug auf Aufrufe der Methoden push
, try_pop
und empty
.
unsafe_begin
Gibt einen Iterator vom Typ iterator
oder const_iterator
an den Anfang der gleichzeitigen Warteschlange zurück. Diese Methode ist nicht nebenläufigkeitssicher.
iterator unsafe_begin();
const_iterator unsafe_begin() const;
Rückgabewert
Ein Iterator vom Typ iterator
oder const_iterator
bis zum Anfang des gleichzeitigen Warteschlangenobjekts.
Hinweise
Die Iteratoren für die concurrent_queue
Klasse sind in erster Linie für das Debuggen vorgesehen, da sie langsam sind und die Iteration in Bezug auf andere Warteschlangenvorgänge nicht parallel ist.
unsafe_end
Gibt einen Iterator vom Typ iterator
oder const_iterator
an das Ende der gleichzeitigen Warteschlange zurück. Diese Methode ist nicht nebenläufigkeitssicher.
iterator unsafe_end();
const_iterator unsafe_end() const;
Rückgabewert
Ein Iterator vom Typ iterator
oder const_iterator
bis zum Ende der gleichzeitigen Warteschlange.
Hinweise
Die Iteratoren für die concurrent_queue
Klasse sind in erster Linie für das Debuggen vorgesehen, da sie langsam sind und die Iteration in Bezug auf andere Warteschlangenvorgänge nicht parallel ist.
unsafe_size
Gibt die Anzahl der Elemente in der Warteschlange zurück. Diese Methode ist nicht nebenläufigkeitssicher.
size_type unsafe_size() const;
Rückgabewert
Die Größe der gleichzeitigen Warteschlange.
Hinweise
unsafe_size
ist nicht Parallelitätssicher und kann falsche Ergebnisse erzeugen, wenn sie gleichzeitig mit Aufrufen der Methoden push
, try_pop
, und empty
.