Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Třída concurrent_queue je sekvenční třída kontejneru, která umožňuje přístup k jeho prvkům v režimu první dovnitř, první ven. 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ě.
_Ax
Typ, který představuje objekt alokátoru uložený v paměti, jenž 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é typové definice
| Název | Popis |
|---|---|
allocator_type |
Typ, který představuje třídu alokátoru pro souběžnou frontu. |
const_iterator |
Typ, který reprezentuje iterátor bez podpory 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ří konkurentní 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ě zařazené 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á při souběžném zpracování. |
| get_allocator | Vrátí kopii alokátoru použitého k vytvoření souběžné fronty. Tato metoda je bezpečná při souběžném zpracování. |
| push | Přetíženo. Přidá položku na konec souběžné fronty. Tato metoda je bezpečná při souběžném zpracování. |
| try_pop | Pokud je položka k dispozici, odřadí položku z fronty. Tato metoda je bezpečná při souběžném zpracování. |
| nebezpečný_začátek | 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. |
| nebezpečný_konec | 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. |
| nebezpečná_velikost | 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
odznačit
Vymaže souběžnou frontu a zničí všechny aktuálně zařazené prvky. Tato metoda není bezpečná pro souběžnost.
void clear();
concurrent_queue
Vytvoří konkurentní 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í alokátorový objekt _Al 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á při souběžném zpracování.
bool empty() const;
Návratová hodnota
true pokud byla souběžná fronta prázdná v okamžiku, kdy jsme se podívali, false jinak.
Poznámky
I když je tato metoda bezpečná pro souběžnost s ohledem na volání metod push, try_popa 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á při souběžném zpracování.
allocator_type get_allocator() const;
Návratová hodnota
Kopie alokátoru použitého k vytvoření souběžné fronty.
nabídka
Přidá položku na konec souběžné fronty. Tato metoda je bezpečná při souběžném zpracování.
void push(const T& _Src);
void push(T&& _Src);
Parametry
_Src
Položka, která se má přidat do fronty.
Poznámky
push je bezpečné pro souběžnost při volání 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á při souběžném zpracování.
bool try_pop(T& _Dest);
Parametry
_Dest
Odkaz na místo pro uložení vyřazené položky.
Návratová hodnota
true pokud byla položka úspěšně vyřazena z fronty, false jinak false.
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í z fronty, tato funkce vrátí false bez blokování a obsah parametru _Dest není definován.
try_pop je bezpečný pro souběh, pokud jde o volání 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 k začátku 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á ve vztahu k ostatním operacím fronty.
nebezpečný_konec
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.
nebezpečná_velikost
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_popa empty.