Partager via


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.

_Ax
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 _OtherQsimultanée.

Le troisième constructeur spécifie un déplacement de la file d’attente _OtherQsimultané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_popet emptyque 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_popet 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_popet 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_popet empty.

Voir aussi

accès concurrentiel Namespace