Maison >développement back-end >C++ >Comment puis-je implémenter une file d'attente d'historique de taille fixe à l'aide de ConcurrentQueue ?

Comment puis-je implémenter une file d'attente d'historique de taille fixe à l'aide de ConcurrentQueue ?

DDD
DDDoriginal
2025-01-13 10:00:19824parcourir

How Can I Implement a Fixed-Size History Queue Using ConcurrentQueue?

Extension de ConcurrentQueue pour la gestion de l'historique de taille fixe

System.Collections.Concurrent.ConcurrentQueue est un outil robuste pour gérer les files d'attente dans les environnements multithread. Cependant, il ne prend pas automatiquement en charge une limitation de taille fixe ; les entrées plus anciennes ne sont pas automatiquement supprimées lorsque la file d'attente est pleine.

Présentation de la solution FixedSizedQueue

Pour surmonter cette limitation, nous allons créer une FixedSizedQueue classe wrapper. Cette classe améliore la fonctionnalité de ConcurrentQueue pour supprimer automatiquement les éléments obsolètes lors de nouvelles insertions.

Stratégie de mise en œuvre

FixedSizedQueue encapsule une instance privée ConcurrentQueue et un objet de verrouillage pour la sécurité des threads. La méthode Enqueue vérifie le Count de la file d'attente. S'il dépasse le Limit prédéfini, la méthode acquiert le verrou, puis retire les éléments de la file d'attente à plusieurs reprises jusqu'à ce que le Count soit en dessous du Limit.

Application pratique

Pour utiliser FixedSizedQueue, initialisez-le avec le Limit souhaité :

<code class="language-csharp">FixedSizedQueue<string> urlQueue = new FixedSizedQueue<string>(100);</code>

Ajouter de nouvelles URL (et supprimer automatiquement les anciennes) est simple :

<code class="language-csharp">urlQueue.Enqueue("example.com");</code>

Avantages

FixedSizedQueue offre une approche rationalisée et efficace pour gérer les données historiques de taille fixe. Il donne la priorité aux entrées les plus récentes tout en supprimant automatiquement les plus anciennes, ce qui est idéal pour les scénarios avec un stockage limité ou lorsque le suivi d'un nombre spécifique d'événements récents est crucial.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn