Freigeben über


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 _OtherQan.

Der dritte Konstruktor gibt eine Verschiebung der gleichzeitigen Warteschlange _OtherQan.

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 pushtry_pop, und emptyder 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_popund 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_popund 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.

Siehe auch

Concurrency-Namespace