concurrent_queue (clase)
La clase concurrent_queue
es una clase de contenedor de secuencias que permite el acceso primero en entrar, primero en salir a sus elementos. Habilita un conjunto limitado de operaciones seguras para simultaneidad, como push
y try_pop
. Aquí, seguro para la simultaneidad significa que los punteros e iteradores siempre son válidos. No es una garantía de inicialización de elementos ni de un orden transversal determinado.
Sintaxis
template<typename T, class _Ax>
class concurrent_queue: public ::Concurrency::details::_Concurrent_queue_base_v4;
Parámetros
T
Tipo de datos de los elementos que se van a almacenar en la cola.
_Ax
El tipo que representa el objeto asignador almacenado que encapsula los detalles sobre la asignación y la desasignación de memoria para esta cola simultánea. Este argumento es opcional y el valor predeterminado es allocator<T>
.
Miembros
Definiciones de tipos públicas
Nombre | Descripción |
---|---|
allocator_type |
Tipo que representa la clase de asignador del objeto simultáneo. |
const_iterator |
Tipo que representa un iterador const no seguro para subprocesos sobre los elementos de una cola simultánea. |
const_reference |
Tipo que proporciona una referencia a un elemento const almacenado en una cola simultánea para leer y realizar operaciones const . |
difference_type |
Tipo que proporciona la distancia firmada entre dos elementos de una cola simultánea. |
iterator |
Tipo que representa un iterador no seguro para subprocesos sobre los elementos de una cola simultánea. |
reference |
Tipo que proporciona una referencia a un elemento almacenado en una cola simultánea. |
size_type |
Tipo que cuenta el número de elementos en una cola simultánea. |
value_type |
Tipo que representa el tipo de datos almacenado en una cola simultánea. |
Constructores públicos
Nombre | Descripción |
---|---|
concurrent_queue | Con sobrecarga. Construye una cola simultánea. |
~concurrent_queue Destructor | Destruye la cola simultánea. |
Métodos públicos
Nombre | Descripción |
---|---|
eliminar | Borra la cola simultánea y destruye los elementos que se encuentran en cola. Este método no es seguro para la simultaneidad. |
empty | Comprueba si la cola simultánea está vacía en el momento en que se llama a este método. Este método es seguro para simultaneidad. |
get_allocator | Devuelve una copia del asignador usado para construir la cola simultánea. Este método es seguro para simultaneidad. |
push | Con sobrecarga. Pone en cola un elemento al final de la cola simultánea. Este método es seguro para simultaneidad. |
try_pop | Quita un elemento de la cola si hay uno disponible. Este método es seguro para simultaneidad. |
unsafe_begin | Con sobrecarga. Devuelve un iterador de tipo iterator o const_iterator al principio de la cola simultánea. Este método no es seguro para la simultaneidad. |
unsafe_end | Con sobrecarga. Devuelve un iterador de tipo iterator o const_iterator al final de la cola simultánea. Este método no es seguro para la simultaneidad. |
unsafe_size | Devuelve el número de elementos de la cola. Este método no es seguro para la simultaneidad. |
Comentarios
Para más información, consulte Contenedores y objetos paralelos.
Jerarquía de herencia
concurrent_queue
Requisitos
Encabezado: concurrent_queue.h
Espacio de nombres: simultaneidad
eliminar
Borra la cola simultánea y destruye los elementos que se encuentran en cola. Este método no es seguro para la simultaneidad.
void clear();
concurrent_queue
Construye una cola simultánea.
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);
Parámetros
_InputIterator
Tipo del iterador de entrada que especifica un intervalo de valores.
_Al
La clase de asignador que se usa con este objeto.
_OtherQ
El objeto de origen concurrent_queue
del que copiar o mover elementos.
_Begin
Posición del primer elemento en el intervalo de elementos que se va a copiar.
_End
Posición del primer elemento más allá del intervalo de elementos que se va a copiar.
Comentarios
Todos los constructores almacenan un objeto asignador _Al
e inicializan la cola.
El primer constructor especifica una cola inicial vacía y especifica explícitamente el tipo de asignador que se va a usar.
El segundo constructor especifica una copia de la cola simultánea _OtherQ
.
El tercer constructor especifica un movimiento de la cola simultánea _OtherQ
.
El cuarto constructor especifica los valores proporcionados por el intervalo del iterador [ _Begin
, _End
).
~concurrent_queue
Destruye la cola simultánea.
~concurrent_queue();
empty
Comprueba si la cola simultánea está vacía en el momento en que se llama a este método. Este método es seguro para simultaneidad.
bool empty() const;
Valor devuelto
true
si la cola simultánea estaba vacía en el momento en que se veía; de lo contrario, false
.
Comentarios
Aunque este método es seguro para la simultaneidad con respecto a las llamadas a los métodos push
, try_pop
y empty
, el valor devuelto podría ser incorrecto para cuando el subproceso que realiza la llamada lo inspecciona.
get_allocator
Devuelve una copia del asignador usado para construir la cola simultánea. Este método es seguro para simultaneidad.
allocator_type get_allocator() const;
Valor devuelto
Copia del asignador utilizado para construir la cola simultánea.
push
Pone en cola un elemento al final de la cola simultánea. Este método es seguro para simultaneidad.
void push(const T& _Src);
void push(T&& _Src);
Parámetros
_Src
Elemento que se va a agregar a la cola.
Comentarios
push
es seguro para la simultaneidad con respecto a las llamadas a los métodos push
, try_pop
y empty
.
try_pop
Quita un elemento de la cola si hay uno disponible. Este método es seguro para simultaneidad.
bool try_pop(T& _Dest);
Parámetros
_Dest
Referencia a una ubicación para almacenar el elemento quitado de la cola.
Valor devuelto
true
si el elemento se ha eliminado de la cola correctamente; de lo contrario, false
.
Comentarios
Si un elemento se ha quitado correctamente de la cola, el parámetro _Dest
recibe el valor "desqueued", se destruye el valor original que se mantiene en la cola y esta función devuelve true
. Si no hay ningún elemento para quitar de la cola, esta función devuelve false
sin bloqueo y el contenido del parámetro _Dest
no está definido.
try_pop
es seguro para la simultaneidad con respecto a las llamadas a los métodos push
, try_pop
y empty
.
unsafe_begin
Devuelve un iterador de tipo iterator
o const_iterator
al principio de la cola simultánea. Este método no es seguro para la simultaneidad.
iterator unsafe_begin();
const_iterator unsafe_begin() const;
Valor devuelto
Iterador de tipo iterator
o const_iterator
al principio del objeto de la cola simultánea.
Comentarios
Los iteradores de la clase concurrent_queue
están pensados principalmente para la depuración, ya que son lentos y la iteración no es segura para la simultaneidad con respecto a otras operaciones de cola.
unsafe_end
Devuelve un iterador de tipo iterator
o const_iterator
al final de la cola simultánea. Este método no es seguro para la simultaneidad.
iterator unsafe_end();
const_iterator unsafe_end() const;
Valor devuelto
Iterador de tipo iterator
o const_iterator
al final de la cola simultánea.
Comentarios
Los iteradores de la clase concurrent_queue
están pensados principalmente para la depuración, ya que son lentos y la iteración no es segura para la simultaneidad con respecto a otras operaciones de cola.
unsafe_size
Devuelve el número de elementos de la cola. Este método no es seguro para la simultaneidad.
size_type unsafe_size() const;
Valor devuelto
Tamaño de la cola simultánea.
Comentarios
unsafe_size
no es seguro para la simultaneidad y puede generar resultados incorrectos si se llama simultáneamente con llamadas a los métodos push
, try_pop
y empty
.