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 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_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á 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_popa 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_popa 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_popa empty.