Clase concurrent_queue

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

clear

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.

Consulte también

concurrency (espacio de nombres)