Udostępnij za pośrednictwem


concurrent_queue — Klasa

Klasa concurrent_queue jest klasą kontenera sekwencji, która umożliwia dostęp pierwszy na pierwszym wyjęcie do swoich elementów. Umożliwia ona ograniczony zestaw operacji bezpiecznych współbieżności, takich jak push i try_pop. W tym miejscu wskaźniki lub iteratory są zawsze prawidłowe. Nie jest to gwarancja inicjowania elementów ani określonej kolejności przechodzenia.

Składnia

template<typename T, class _Ax>
class concurrent_queue: public ::Concurrency::details::_Concurrent_queue_base_v4;

Parametry

T
Typ danych elementów, które mają być przechowywane w kolejce.

_Siekiera
Typ reprezentujący przechowywany obiekt alokatora, który hermetyzuje szczegóły dotyczące alokacji i cofania przydziału pamięci dla tej współbieżnej kolejki. Ten argument jest opcjonalny, a wartość domyślna to allocator<T>.

Elementy członkowskie

Definicje typów publicznych

Nazwa/nazwisko opis
allocator_type Typ reprezentujący klasę alokatora dla kolejki współbieżnej.
const_iterator Typ reprezentujący iterator niezwiązany const wątkowo z elementami w kolejce współbieżnej.
const_reference Typ, który zawiera odwołanie do elementu przechowywanego const w kolejce współbieżnej na potrzeby odczytywania i wykonywania const operacji.
difference_type Typ, który zapewnia podpisaną odległość między dwoma elementami w kolejce współbieżnej.
iterator Typ reprezentujący iterator bezpieczny dla wątków nad elementami w kolejce współbieżnej.
reference Typ, który zawiera odwołanie do elementu przechowywanego w kolejce współbieżnej.
size_type Typ, który zlicza elementy w kolejce współbieżnej.
value_type Typ reprezentujący typ danych przechowywany w kolejce współbieżnej.

Konstruktory publiczne

Nazwa/nazwisko opis
concurrent_queue Przeciążone. Tworzy kolejkę współbieżną.
~concurrent_queue Destruktor Niszczy kolejkę współbieżną.

Metody publiczne

Nazwa/nazwisko opis
jasny Czyści równoczesną kolejkę, niszcząc wszystkie aktualnie w kolejce elementy. Ta metoda nie jest bezpieczna współbieżności.
empty Sprawdza, czy kolejka współbieżna jest pusta w momencie wywołania tej metody. Ta metoda jest bezpieczna współbieżności.
get_allocator Zwraca kopię alokatora używanego do konstruowania kolejki współbieżnej. Ta metoda jest bezpieczna współbieżności.
push Przeciążone. Kolejkuje element na końcu kolejki współbieżnej. Ta metoda jest bezpieczna współbieżności.
try_pop Kolejkuje element z kolejki, jeśli jest dostępny. Ta metoda jest bezpieczna współbieżności.
unsafe_begin Przeciążone. Zwraca iterator typu iterator lub const_iterator na początku kolejki współbieżnej. Ta metoda nie jest bezpieczna współbieżności.
unsafe_end Przeciążone. Zwraca iterator typu iterator lub const_iterator na końcu kolejki współbieżnej. Ta metoda nie jest bezpieczna współbieżności.
unsafe_size Zwraca liczbę elementów w kolejce. Ta metoda nie jest bezpieczna współbieżności.

Uwagi

Aby uzyskać więcej informacji, zobacz Parallel Containers and Objects (Kontenery równoległe i obiekty).

Hierarchia dziedziczenia

concurrent_queue

Wymagania

Nagłówek: concurrent_queue.h

Przestrzeń nazw: współbieżność

jasny

Czyści równoczesną kolejkę, niszcząc wszystkie aktualnie w kolejce elementy. Ta metoda nie jest bezpieczna współbieżności.

void clear();

concurrent_queue

Tworzy kolejkę współbieżną.

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 iteratora wejściowego, który określa zakres wartości.

_Al
Klasa alokatora do wykorzystania z tym obiektem.

_OtherQ
Obiekt źródłowy concurrent_queue do kopiowania lub przenoszenia elementów.

_Zaczynać
Pozycja pierwszego elementu w zakresie elementów do skopiowania.

_Koniec
Położenie pierwszego elementu poza zakresem elementów do skopiowania.

Uwagi

Wszystkie konstruktory przechowują obiekt _Al alokatora i inicjują kolejkę.

Pierwszy konstruktor określa pustą kolejkę początkową i jawnie określa typ alokatora do użycia.

Drugi konstruktor określa kopię kolejki _OtherQwspółbieżnej .

Trzeci konstruktor określa ruch kolejki _OtherQwspółbieżnej .

Czwarty konstruktor określa wartości dostarczone przez zakres iteratora [ _Begin, _End).

~concurrent_queue

Niszczy kolejkę współbieżną.

~concurrent_queue();

empty

Sprawdza, czy kolejka współbieżna jest pusta w momencie wywołania tej metody. Ta metoda jest bezpieczna współbieżności.

bool empty() const;

Wartość zwracana

true jeśli kolejka współbieżna była pusta w tej chwili, false w przeciwnym razie.

Uwagi

Chociaż ta metoda jest bezpieczna współbieżności w odniesieniu do wywołań metod push, try_popi empty, zwracana wartość może być niepoprawna w czasie, gdy jest sprawdzana przez wątek wywołujący.

get_allocator

Zwraca kopię alokatora używanego do konstruowania kolejki współbieżnej. Ta metoda jest bezpieczna współbieżności.

allocator_type get_allocator() const;

Wartość zwracana

Kopia alokatora używana do konstruowania kolejki współbieżnej.

push

Kolejkuje element na końcu kolejki współbieżnej. Ta metoda jest bezpieczna współbieżności.

void push(const T& _Src);

void push(T&& _Src);

Parametry

_Src
Element, który ma zostać dodany do kolejki.

Uwagi

push jest bezpieczny ze współbieżnością w odniesieniu do wywołań metod push, try_popi empty.

try_pop

Kolejkuje element z kolejki, jeśli jest dostępny. Ta metoda jest bezpieczna współbieżności.

bool try_pop(T& _Dest);

Parametry

_Dest
Odwołanie do lokalizacji do przechowywania elementu w kolejce.

Wartość zwracana

true jeśli element został pomyślnie w kolejce, false w przeciwnym razie.

Uwagi

Jeśli element został pomyślnie odsłaniany, parametr _Dest odbiera wartość w kolejce, oryginalna wartość przechowywana w kolejce zostanie zniszczona, a ta funkcja zwróci wartość true. Jeśli nie było elementu do dequeue, ta funkcja zwraca false bez blokowania, a zawartość parametru _Dest jest niezdefiniowana.

try_pop jest bezpieczny ze współbieżnością w odniesieniu do wywołań metod push, try_popi empty.

unsafe_begin

Zwraca iterator typu iterator lub const_iterator na początku kolejki współbieżnej. Ta metoda nie jest bezpieczna współbieżności.

iterator unsafe_begin();

const_iterator unsafe_begin() const;

Wartość zwracana

Iterator typu iterator lub const_iterator na początku obiektu kolejki współbieżnej.

Uwagi

Iteratory dla concurrent_queue klasy są przeznaczone głównie do debugowania, ponieważ są powolne, a iteracja nie jest bezpieczna współbieżności w odniesieniu do innych operacji kolejki.

unsafe_end

Zwraca iterator typu iterator lub const_iterator na końcu kolejki współbieżnej. Ta metoda nie jest bezpieczna współbieżności.

iterator unsafe_end();

const_iterator unsafe_end() const;

Wartość zwracana

Iterator typu iterator lub const_iterator na końcu kolejki współbieżnej.

Uwagi

Iteratory dla concurrent_queue klasy są przeznaczone głównie do debugowania, ponieważ są powolne, a iteracja nie jest bezpieczna współbieżności w odniesieniu do innych operacji kolejki.

unsafe_size

Zwraca liczbę elementów w kolejce. Ta metoda nie jest bezpieczna współbieżności.

size_type unsafe_size() const;

Wartość zwracana

Rozmiar kolejki współbieżnej.

Uwagi

unsafe_size nie jest bezpieczny dla współbieżności i może generować nieprawidłowe wyniki, jeśli są wywoływane współbieżnie z wywołaniami metod push, try_popi empty.

Zobacz też

Przestrzeń nazw współbieżności