concurrent_queue – třída
Třída concurrent_queue
je sekvenční třída kontejneru, která umožňuje přístup k jeho prvkům jako první in. Umožňuje omezenou sadu operací bezpečných pro souběžnost, například push
a try_pop
. V této chvíli souběžnost znamená, že ukazatele nebo iterátory jsou vždy platné. Nejedná se o záruku inicializace prvků ani konkrétního pořadí procházení.
Syntaxe
template<typename T, class _Ax>
class concurrent_queue: public ::Concurrency::details::_Concurrent_queue_base_v4;
Parametry
T
Datový typ prvků, které mají být uloženy ve frontě.
_Sekyra
Typ, který představuje uložený objekt alokátoru, který zapouzdřuje podrobnosti o přidělení a uvolnění paměti pro tuto souběžnou frontu. Tento argument je nepovinný a výchozí hodnota je allocator<T>
.
Členové
Veřejné definice typedef
Název | Popis |
---|---|
allocator_type |
Typ, který představuje třídu alokátoru pro souběžnou frontu. |
const_iterator |
Typ, který představuje iterátor bezpečný const pro přístup z více vláken nad prvky v souběžné frontě. |
const_reference |
Typ, který poskytuje odkaz na const prvek uložený v souběžné frontě pro čtení a provádění const operací. |
difference_type |
Typ, který poskytuje podepsanou vzdálenost mezi dvěma prvky v souběžné frontě. |
iterator |
Typ, který představuje nevláknový iterátor nad prvky v souběžné frontě. |
reference |
Typ, který poskytuje odkaz na prvek uložený v souběžné frontě. |
size_type |
Typ, který spočítá počet prvků v souběžné frontě. |
value_type |
Typ, který představuje datový typ uložený v souběžné frontě. |
Veřejné konstruktory
Název | Popis |
---|---|
concurrent_queue | Přetíženo. Vytvoří souběžnou frontu. |
~concurrent_queue Destruktor | Zničí souběžnou frontu. |
Veřejné metody
Název | Popis |
---|---|
jasný | Vymaže souběžnou frontu a zničí všechny aktuálně vyčíslené prvky. Tato metoda není bezpečná pro souběžnost. |
empty | Testuje, jestli je souběžná fronta v okamžiku, kdy se tato metoda volá, prázdná. Tato metoda je bezpečná pro souběžnost. |
get_allocator | Vrátí kopii alokátoru použitého k vytvoření souběžné fronty. Tato metoda je bezpečná pro souběžnost. |
push | Přetíženo. Vytvoří frontu položky na konci souběžné fronty. Tato metoda je bezpečná pro souběžnost. |
try_pop | Pokud je položka k dispozici, odřadí položku z fronty. Tato metoda je bezpečná pro souběžnost. |
unsafe_begin | Přetíženo. Vrátí iterátor typu iterator nebo const_iterator na začátek souběžné fronty. Tato metoda není bezpečná pro souběžnost. |
unsafe_end | Přetíženo. Vrátí iterátor typu iterator nebo const_iterator na konec souběžné fronty. Tato metoda není bezpečná pro souběžnost. |
unsafe_size | Vrátí počet položek ve frontě. Tato metoda není bezpečná pro souběžnost. |
Poznámky
Další informace naleznete v tématu Paralelní kontejnery a objekty.
Hierarchie dědičnosti
concurrent_queue
Požadavky
Hlavička: concurrent_queue.h
Obor názvů: souběžnost
jasný
Vymaže souběžnou frontu a zničí všechny aktuálně vyčíslené prvky. Tato metoda není bezpečná pro souběžnost.
void clear();
concurrent_queue
Vytvoří souběžnou frontu.
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);
Parametry
_InputIterator
Typ vstupního iterátoru, který určuje rozsah hodnot.
_Hliník
Třída alokátoru, která se má použít s tímto objektem.
_OtherQ
Zdrojový concurrent_queue
objekt ke zkopírování nebo přesunutí prvků.
_Začít
Pozice prvního prvku v rozsahu prvků, které se mají zkopírovat.
_Konec
Pozice prvního prvku nad rozsah prvků, které se mají zkopírovat.
Poznámky
Všechny konstruktory ukládají objekt _Al
alokátoru a inicializují frontu.
První konstruktor určuje prázdnou počáteční frontu a explicitně určuje typ alokátoru, který se má použít.
Druhý konstruktor určuje kopii souběžné fronty _OtherQ
.
Třetí konstruktor určuje přesun souběžné fronty _OtherQ
.
Čtvrtý konstruktor určuje hodnoty zadané rozsahem iterátoru [ _Begin
, _End
).
~concurrent_queue
Zničí souběžnou frontu.
~concurrent_queue();
empty
Testuje, jestli je souběžná fronta v okamžiku, kdy se tato metoda volá, prázdná. Tato metoda je bezpečná pro souběžnost.
bool empty() const;
Návratová hodnota
true
pokud byla souběžná fronta v okamžiku, kdy jsme se podívali, prázdná, false
jinak.
Poznámky
I když je tato metoda bezpečná pro souběžnost s ohledem na volání metod push
, try_pop
a empty
, vrácená hodnota může být nesprávná v době, kdy je zkontrolována volajícím vláknem.
get_allocator
Vrátí kopii alokátoru použitého k vytvoření souběžné fronty. Tato metoda je bezpečná pro souběžnost.
allocator_type get_allocator() const;
Návratová hodnota
Kopie alokátoru použitého k vytvoření souběžné fronty.
push
Vytvoří frontu položky na konci souběžné fronty. Tato metoda je bezpečná pro souběžnost.
void push(const T& _Src);
void push(T&& _Src);
Parametry
_Src
Položka, která se má přidat do fronty.
Poznámky
push
je v souladu s voláním metod push
, try_pop
a empty
.
try_pop
Pokud je položka k dispozici, odřadí položku z fronty. Tato metoda je bezpečná pro souběžnost.
bool try_pop(T& _Dest);
Parametry
_Dest
Odkaz na umístění pro uložení vyřazené položky.
Návratová hodnota
true
pokud byla položka úspěšně vyřazena z fronty, false
jinak.
Poznámky
Pokud byla položka úspěšně vyřazena z fronty, parametr _Dest
obdrží hodnotu vyřazení z fronty, původní hodnota uložená ve frontě je zničena a tato funkce vrátí true
. Pokud nebyla k dispozici žádná položka k odstranění fronty, vrátí tato funkce false
bez blokování a obsah parametru _Dest
není definován.
try_pop
je v souladu s voláním metod push
, try_pop
a empty
.
unsafe_begin
Vrátí iterátor typu iterator
nebo const_iterator
na začátek souběžné fronty. Tato metoda není bezpečná pro souběžnost.
iterator unsafe_begin();
const_iterator unsafe_begin() const;
Návratová hodnota
Iterátor typu iterator
nebo const_iterator
na začátek souběžného objektu fronty.
Poznámky
Iterátory pro concurrent_queue
třídu jsou primárně určeny pro ladění, protože jsou pomalé a iterace není souběžná s ohledem na jiné operace fronty.
unsafe_end
Vrátí iterátor typu iterator
nebo const_iterator
na konec souběžné fronty. Tato metoda není bezpečná pro souběžnost.
iterator unsafe_end();
const_iterator unsafe_end() const;
Návratová hodnota
Iterátor typu iterator
nebo const_iterator
na konec souběžné fronty.
Poznámky
Iterátory pro concurrent_queue
třídu jsou primárně určeny pro ladění, protože jsou pomalé a iterace není souběžná s ohledem na jiné operace fronty.
unsafe_size
Vrátí počet položek ve frontě. Tato metoda není bezpečná pro souběžnost.
size_type unsafe_size() const;
Návratová hodnota
Velikost souběžné fronty.
Poznámky
unsafe_size
není souběžnost bezpečná a může vést k nesprávným výsledkům, pokud jsou volána souběžně s voláními metod push
, try_pop
a empty
.