Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La clase concurrent_queue es un contenedor de secuencia que permite el acceso a sus elementos en el orden de primero en entrar, primero en salir. Habilita un conjunto limitado de operaciones seguras para simultaneidad, como push y try_pop. Aquí, seguro para la concurrencia significa que los punteros e iteradores siempre son válidos. No es una garantía de inicialización de elementos ni de un orden de recorrido determinado.
Sintaxis
template<typename T, class _Ax>
class concurrent_queue: public ::Concurrency::details::_Concurrent_queue_base_v4;
Parámetros
T
Tipo de dato 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 del asignador para la cola concurrente. |
const_iterator |
Tipo que representa un iterador const no seguro para subprocesos sobre los elementos de una cola concurrente. |
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 hilos sobre los elementos de una cola concurrente. |
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 concurrente. |
value_type |
Tipo que representa el tipo de dato almacenado en una cola simultánea. |
Constructores públicos
| Nombre | Descripción |
|---|---|
| concurrent_queue | Sobrecargado Construye una cola simultánea. |
| ~concurrent_queue Destructor | Destruye la cola concurrente. |
Métodos públicos
| Nombre | Descripción |
|---|---|
| eliminar | Borra la cola concurrente a la vez que destruye los elementos que se encuentran encolados. 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 | Sobrecargado Encola 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 | Sobrecargado 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 | Sobrecargado Devuelve un iterador de tipo iterator o const_iterator al final de la cola concurrente. 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 concurrente a la vez que destruye los elementos que se encuentran encolados. 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 concurrente _OtherQ.
El tercer constructor especifica un traslado de la cola concurrente _OtherQ.
El cuarto constructor especifica los valores proporcionados por el intervalo del iterador [ _Begin, _End).
~concurrent_queue
Destruye la cola concurrente.
~concurrent_queue();
vacío
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 concurrente estaba vacía cuando la revisamos; 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
Encola 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 bloquear, y los contenidos del parámetro _Dest no están definidos.
try_pop es seguro para la simultaneidad con respecto a las llamadas a los métodos push, try_pop y empty.
Comienzo_inseguro
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 inicio del objeto de la cola concurrente.
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 concurrente. 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 hasta el final de la cola concurrente.
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.
tamaño_inseguro
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.