concurrent_queue – třída

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.

Viz také

concurrency – obor názvů