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 _OtherQ
współbieżnej .
Trzeci konstruktor określa ruch kolejki _OtherQ
współ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_pop
i 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_pop
i 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_pop
i 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_pop
i empty
.