Sdílet prostřednictvím


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

_Ax
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

Jméno 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

Jméno popis
concurrent_queue Přetíženo. Vytvoří souběžnou frontu.
~concurrent_queue Destruktor Zničí souběžnou frontu.

Veřejné metody

Jméno 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.

_Al
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;

Vrácená 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;

Vrácená 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.

Vrácená 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;

Vrácená 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;

Vrácená 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;

Vrácená 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ů