concurrent_queue, classe
La classe concurrent_queue
est une classe de conteneur de séquence qui autorise un accès Premier entré, premier sorti à ses éléments. Elle permet un ensemble limité d'opérations d'accès concurrentiel sécurisé, comme push
et try_pop
. Ici, la concurrence-safe signifie que les pointeurs ou les itérateurs sont toujours valides. Il ne s’agit pas d’une garantie d’initialisation d’élément ou d’un ordre de traversée particulier.
Syntaxe
template<typename T, class _Ax>
class concurrent_queue: public ::Concurrency::details::_Concurrent_queue_base_v4;
Paramètres
T
Type de données des éléments à stocker dans la file d’attente.
_Hache
Type qui représente l’objet d’allocateur stocké qui encapsule les détails sur l’allocation et la désallocation de la mémoire pour cette file d’attente simultanée. Cet argument est facultatif et sa valeur par défaut est allocator<T>
.
Membres
Typedefs publics
Nom | Description |
---|---|
allocator_type |
Type qui représente la classe d’allocator pour la file d’attente simultanée. |
const_iterator |
Type qui représente un itérateur non thread-safe const sur des éléments d’une file d’attente simultanée. |
const_reference |
Type qui fournit une référence à un const élément stocké dans une file d’attente simultanée pour la lecture et l’exécution d’opérations const . |
difference_type |
Type qui fournit la distance signée entre deux éléments dans une file d’attente simultanée. |
iterator |
Type qui représente un itérateur non thread-safe sur les éléments d’une file d’attente simultanée. |
reference |
Type qui fournit une référence à un élément stocké dans une file d’attente simultanée. |
size_type |
Type qui compte le nombre d’éléments dans une file d’attente simultanée. |
value_type |
Type qui représente le type de données stocké dans une file d’attente simultanée. |
Constructeurs publics
Nom | Description |
---|---|
concurrent_queue | Surcharge. Construit une file d’attente simultanée. |
~concurrent_queue Destructeur | Détruit la file d’attente simultanée. |
Méthodes publiques
Nom | Description |
---|---|
clear | Efface la file d’attente simultanée, détruisant tous les éléments actuellement mis en file d’attente. Cette méthode n’est pas sécurisée par concurrence. |
empty | Teste si la file d’attente simultanée est vide au moment où cette méthode est appelée. Cette méthode est concurrency-safe. |
get_allocator | Retourne une copie de l’allocateur utilisé pour construire la file d’attente simultanée. Cette méthode est concurrency-safe. |
push | Surcharge. Met en file d’attente un élément à la fin de la file d’attente simultanée. Cette méthode est concurrency-safe. |
try_pop | Supprime un élément de la file d’attente si un élément est disponible. Cette méthode est concurrency-safe. |
unsafe_begin | Surcharge. Retourne un itérateur de type iterator ou const_iterator au début de la file d’attente simultanée. Cette méthode n’est pas sécurisée par concurrence. |
unsafe_end | Surcharge. Retourne un itérateur de type iterator ou const_iterator à la fin de la file d’attente simultanée. Cette méthode n’est pas sécurisée par concurrence. |
unsafe_size | Retourne le nombre d’éléments dans la file d’attente. Cette méthode n’est pas sécurisée par concurrence. |
Notes
Pour plus d’informations, consultez Conteneurs et objets parallèles.
Hiérarchie d'héritage
concurrent_queue
Spécifications
En-tête : concurrent_queue.h
Espace de noms : concurrency
clear
Efface la file d’attente simultanée, détruisant tous les éléments actuellement mis en file d’attente. Cette méthode n’est pas sécurisée par concurrence.
void clear();
concurrent_queue
Construit une file d’attente simultanée.
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);
Paramètres
_InputIterator
Type de l’itérateur d’entrée qui spécifie une plage de valeurs.
_Al
Classe allocator à utiliser avec cet objet.
_OtherQ
Objet source concurrent_queue
à partir duquel copier ou déplacer des éléments.
_Commencer
Position du premier élément dans la plage d'éléments à copier.
_Fin
Position du premier élément suivant la fin de la plage d'éléments à copier.
Notes
Tous les constructeurs stockent un objet _Al
allocator et initialisent la file d’attente.
Le premier constructeur spécifie une file d’attente initiale vide et spécifie explicitement le type d’allocator à utiliser.
Le deuxième constructeur spécifie une copie de la file d’attente _OtherQ
simultanée.
Le troisième constructeur spécifie un déplacement de la file d’attente _OtherQ
simultanée.
Le quatrième constructeur spécifie les valeurs fournies par la plage d’itérateur [ _Begin
, _End
).
~concurrent_queue
Détruit la file d’attente simultanée.
~concurrent_queue();
empty
Teste si la file d’attente simultanée est vide au moment où cette méthode est appelée. Cette méthode est concurrency-safe.
bool empty() const;
Valeur de retour
true
si la file d’attente simultanée était vide au moment où nous avons regardé, false
sinon.
Notes
Bien que cette méthode soit concurrency-safe par rapport aux appels aux méthodes push
, try_pop
et empty
que la valeur retournée peut être incorrecte au moment où elle est inspectée par le thread appelant.
get_allocator
Retourne une copie de l’allocateur utilisé pour construire la file d’attente simultanée. Cette méthode est concurrency-safe.
allocator_type get_allocator() const;
Valeur de retour
Copie de l’allocateur utilisé pour construire la file d’attente simultanée.
push
Met en file d’attente un élément à la fin de la file d’attente simultanée. Cette méthode est concurrency-safe.
void push(const T& _Src);
void push(T&& _Src);
Paramètres
_Src
Élément à ajouter à la file d’attente.
Notes
push
est concurrentiel-safe en ce qui concerne les appels aux méthodes push
, try_pop
et empty
.
try_pop
Supprime un élément de la file d’attente si un élément est disponible. Cette méthode est concurrency-safe.
bool try_pop(T& _Dest);
Paramètres
_Dest
Référence à un emplacement pour stocker l’élément de file d’attente.
Valeur de retour
true
si un élément a été correctement mis en file d’attente, false
sinon.
Notes
Si un élément a été correctement mis en file d’attente, le paramètre _Dest
reçoit la valeur de file d’attente, la valeur d’origine conservée dans la file d’attente est détruite et cette fonction retourne true
. S’il n’y a pas eu d’élément à mettre en file d’attente, cette fonction retourne false
sans blocage et le contenu du _Dest
paramètre n’est pas défini.
try_pop
est concurrentiel-safe en ce qui concerne les appels aux méthodes push
, try_pop
et empty
.
unsafe_begin
Retourne un itérateur de type iterator
ou const_iterator
au début de la file d’attente simultanée. Cette méthode n’est pas sécurisée par concurrence.
iterator unsafe_begin();
const_iterator unsafe_begin() const;
Valeur de retour
Itérateur de type iterator
ou const_iterator
au début de l’objet de file d’attente simultané.
Notes
Les itérateurs de la concurrent_queue
classe sont principalement destinés au débogage, car ils sont lents et l’itération n’est pas sécurisée par rapport à d’autres opérations de file d’attente.
unsafe_end
Retourne un itérateur de type iterator
ou const_iterator
à la fin de la file d’attente simultanée. Cette méthode n’est pas sécurisée par concurrence.
iterator unsafe_end();
const_iterator unsafe_end() const;
Valeur de retour
Itérateur de type iterator
ou const_iterator
à la fin de la file d’attente simultanée.
Notes
Les itérateurs de la concurrent_queue
classe sont principalement destinés au débogage, car ils sont lents et l’itération n’est pas sécurisée par rapport à d’autres opérations de file d’attente.
unsafe_size
Retourne le nombre d’éléments dans la file d’attente. Cette méthode n’est pas sécurisée par concurrence.
size_type unsafe_size() const;
Valeur de retour
Taille de la file d’attente simultanée.
Notes
unsafe_size
n’est pas concurrency-safe et peut produire des résultats incorrects s’ils sont appelés simultanément avec les appels aux méthodes push
, try_pop
et empty
.